Hallo zusammen, ich versuche eine DLL mit mingw32 zu erzeugen, aber jeder Versuch ist jetzt gescheitert. Ich habe ein linker Problem: zu dieser DLL muss noch eine Lib hinzugelinkt werden, aber ich bekomme permanent diese Fehlermeldung: undefined reference to `_HL_LOGIN@16' Die DLL versuche ich wie folgt zu erzeugen: dllwrap.exe --output-def output.def --driver-name c++ --target i386-mingw32 --implib output.lib $(OBJS) $(LIBS) -o output.dll Die Libs sie wie folgt definiert: LIBS = -L"$(BASECOMPILERPATH)/lib" -Wl,"$(HARDLOCKPATH)/$(HARDLOCKLIB)" --no-export-all-symbols --add-stdcall-alias --enable-stdcall-fixup --kill-at Das ganze ist im Makefile so definiert, dass es bekannt ist (ich meine die "LIBS"). Was mache ich da noch falsch? Die Library, die ich hinzulinken moechte, soll auch eine fuer den GCC sein. Wenn ich mir die exportierten Funktionen der Lib anschaue, dann heissen diese alle etwa in der Form: _HL_LOGIN (ohne das @-Zeichen). Kann mir jemand helfen? Danke. Alex
>_HL_LOGIN@16 müsste ein interner Name sein
schau mal ob 17 solcher fkt vorhanden sind und wie die 16/17 heisst
Hallo, was meinst Du damit? _HL_LOGIN ist eine Funktion, die in der DLL aufgerufen wird, aber aus der Lib stammt (oder kommen soll). Alex
Die 16 hinter dem @ codiert hier die Anzahl der beim Auruf auf dem Stack erwarteten Argumente. Das könnten also vier ints, Pointer oder ähnliches sein. Hat nicht der gcc-Linker die Angewohnheit, Librarynamen noch mit dem Präfix "lib" zu versehen? Und verwenden nicht gcc-Libraries überhaupt eine andere Extension als *.lib? Und ein anderes Dateiformat als das von MS-Compilern erzeugte?
>>Und verwenden nicht gcc-Libraries überhaupt eine andere Extension als >>*.lib? Und ein anderes Dateiformat als das von MS-Compilern erzeugte? ich meine, man kann auch die benutzen (*.lib). Das Format soll unterschiedlich sein. Diese library soll fuer den gcc sein. Hmmm... Was ist den, wenn das nicht so ist (ich meine , wenn diese Lib nicht fuer den gcc ist)? Was kann ich den dann machen? Diese DLL soll ja nachher in einem Programm, dass mit dem gcc erzeugt wird, eingesetzt werden. Kann ich diese vielleicht mit dem MS erzeugen und dann in dem Programm mitbenutzen? Das Problem ist noch, dass ich auch die entsprechende LIB zu dieser DLL brauche. Alex
Das Format von DLLs ist durch das Betriebssystem und nicht durch den verwendeten Compiler definiert. Du kannst also notfalls die DLL auch mit einem anderen Compiler erzeugen. Zum Gebrauch einer DLL benötigt man übrigens nicht zwingend eine Library (das wäre hier eine Importlibrary), man kann auch mit LoadModule und GetProcAddress die DLL zur Laufzeit laden und sich Funktionspointer auf die erforderlichen Funktionen geben lassen. Das ist natürlich umständlicher als die Verwendung einer Importlibrary, bietet aber die Möglichkeit eines benutzerfreundlicheren Fehlerhandlings. Wenn Du aber sowohl die DLL als auch die die DLL verwendende Applikation erstellen sollst, warum verzichtest Du nicht gleich auf die DLL und linkst statisch? (Wobei wir wieder beim Anfangsproblem wären, wie linkt man nicht-gcc-Libraries mit gcc ...) Ich habe allerdings noch nie die Notwendigkeit gesehen, Win32-Applikationen mit gcc zu erzeugen, daher kann ich in Bezug auf die Library-Probleme keine Detaillösungen beitragen.
Hallo, ich habe es jetzt hinbekommen: Bei der Erstellung einer DLL soll man -DDLL als define mitgeben. Dieses define hat diese Probleme verursacht. Alex
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.