【发布时间】:2016-08-02 20:20:32
【问题描述】:
我正在尝试将程序集(使用yasm 编译)与msvc/cl.exe 编译的对象组合在一起,我试图将其(使用link.exe)链接到.dll,即然后链接到最终的可执行文件。
从源代码创建对象文件和从这些对象创建 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
[...]
即使我已使用 __declspec(dllexport) 将声明标记为在 .dll 内导出。
任何想法如何满足链接器并告诉他符号确实存在?
【问题讨论】:
-
您无法使用 Microsoft 的工具将 DLL 链接到可执行文件。您需要使用与 DLL 对应的导入库。
-
@RossRidge 我确实使用生成的导入库。
标签: c visual-c++ assembly nasm yasm