Я пытаюсь совместить сборку (скомпилированную с yasm
) с объектами, собранных msvc
/cl.exe
, который я пытаюсь связать (с link.exe
) в .dll
, который затем связан с окончательным исполняемым файлом.Нерешенная Ссылка при связывании скомпилированного кода с NASM и MSVC
Как создание объектных файлов из источника, так и создание dll с этих объектов работает абсолютно нормально.
На последнем этапе, связывая .dll
с исполняемым выплевывает следующие ошибки:
error LNK2019: unresolved external symbol xxx_xxxx
Я использую C. Несмотря на Win64, не имеющие названия коверкая, я попробовал несколько схем (например, _xxx_xxxx
или __imp_xxx_xxxx
) ,
Рассматривая объектный файл с dumpbin.exe
показывает все символы:
$ 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
Но не в экспортируемых символах из .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
[...]
Хотя я маркированное заявление, как экспортируется внутри .dll
используя __declspec(dllexport)
.
Любые идеи, как удовлетворить компоновщик и сказать ему, что символы действительно есть?
Вы не можете связать DLL с исполняемым файлом с помощью инструментов Microsoft. Вам нужно использовать библиотеку импорта, соответствующую DLL. –
@RossRidge Я использую созданную библиотеку импорта. – Leandros