Ich versuche, Montage (kompiliert mit yasm
) mit Objekten von msvc
/cl.exe
zusammengestellt zu kombinieren, die ich (mit link.exe
) in eine .dll
zu verbinden bin versucht, das ist dann mit der endgültigen ausführbaren Datei verknüpft.Ungelöste Referenz bei der Verknüpfung kompilierten Code mit NASM und MSVC
Sowohl das Erstellen der Objektdateien aus der Quelle und das Erstellen der DLL aus diesen Objekten funktioniert absolut gut.
Im letzten Schritt, die .dll
mit der ausführbaren Datei verknüpft sind folgende Fehler ausspuckt:
error LNK2019: unresolved external symbol xxx_xxxx
Ich verwende C. Trotz Win64 keinen Namen Mangeln hat, habe ich versucht, mehrere Systeme (wie _xxx_xxxx
oder __imp_xxx_xxxx
) .
Untersuchung der Objektdatei mit dumpbin.exe
zeigt alle Symbole:
$ dumpbin /symbols myobj.o
File Type: COFF OBJECT
COFF SYMBOL TABLE
000 00000000 DEBUG notype Filename | .file
002 00000000 SECT1 notype Static | .text
Section length 215, #relocs 0, #linenums 0, checksum 0
004 00000057 SECT1 notype External | xxx_xxxx
005 0000013E SECT1 notype External | xxx_xxxx
006 00000000 SECT1 notype External | xxx_xxxx
Aber nicht in den exportierten Symbole aus der .dll
:
$ dumpbin /exported mylib.dll
File Type: DLL
Section contains the following exports for mylib.dll
00000000 characteristics
57A0FE02 time date stamp Tue Aug 02 22:09:38 2016
0.00 version
1 ordinal base
132 number of functions
132 number of names
[...]
Auch wenn ich die Erklärungen innerhalb der .dll
als exportiert markiert unter Verwendung von __declspec(dllexport)
.
Irgendwelche Ideen, wie man den Linker befriedigt und ihm die Symbole sagt, sind tatsächlich dort?
Sie können eine DLL mithilfe der Microsoft-Tools nicht mit einer ausführbaren Datei verknüpfen. Sie müssen eine Importbibliothek verwenden, die der DLL entspricht. –
@RossRidge Ich verwende die generierte Importbibliothek. – Leandros