DLL mit mingw32

Gast #386423
Lesenswert?

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
Persönliche Seite #386428
Lesenswert?

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?
Gast #386429
Lesenswert?

>>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
Persönliche Seite #386430
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren