Forum: PC-Programmierung DLL mit mingw32


von Alex1 (Gast)


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

von Wolfram (Gast)


Lesenswert?

>_HL_LOGIN@16 müsste ein interner Name sein
schau mal ob 17 solcher fkt vorhanden sind und wie die 16/17 heisst

von Alex1 (Gast)


Lesenswert?

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

von MasterFX (Gast)


Lesenswert?

Welche Lib ist denn das? Selbst google hat 0 Ergebnisse.

von Alex1 (Gast)


Lesenswert?

Das ist eine Hardlock-Lib von aladdin hlw32_gc.lib

Alex

von Rufus Τ. F. (rufus) Benutzerseite


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?

von Alex1 (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Alex1 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.