Ändern von Symbol Namen in DLLs
-
Hi,
ich habe das Problem, dass beim Linken eine Funktion aus einer DLL nicht gefunden werden kann.
Gesucht wird eine Funktion '_imp_foo' in der DLL ist ein Symbol angelegt 'foo'.
Jetzt weiss ich nicht weiter. Wie kann ich mit dieser Sache umgehen?Ich verstehe nicht ganz woher dieses _imp_ kommt.
Gibt es eine Mölichkeit aus dem foo ein _imp_foo in der DLL zu machen? Aber ich denke mal das ist keine gute Lösung, denn beim nächsten erzeugen der DLL heißt das Ding wieder foo.Ich arbeite mit MinGW. Vielleicht ist das wichtig...
Gruss, KB
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das Problem wird vermutlich das C++-Name-Mangling sein. C++ Compiler kodieren in den Symbol Namen immer noch weitere Informationen, wie die Parameter und Namespaces um so Funktions-Überladungen usw. zu ermöglichen. Daher musst du das mangling für die Funktion deaktivieren, mittels extern "C"-Deklaration
extern "C" { void foo(); }
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Compiler-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Konnte das Problem nun scheinbar selber lösen:
Aus
#define EXPORT(type) __declspec(dllexport) type
habe ich
#define EXPORT(type) extern type
gemacht. Dll wurde erfolgreich gelinkt und schein bisher zu funktionieren.
Gruss, KB