mikrocontroller.net

Forum: PC-Programmierung DLL mit mingw32


Autor: Alex1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfram (Gast)
Datum:

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

Autor: Alex1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: MasterFX (Gast)
Datum:

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

Autor: Alex1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist eine Hardlock-Lib von aladdin hlw32_gc.lib

Alex

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.