我正在尝试使用binutils ld 2.21版在Windows上链接一个小DLL(只有一个输入文件)。我在目标文件中标记为dllexport
的每个符号都收到以下错误:
Cannot export <symbol name>: symbol not found
我该怎么办?我已经通过nm的应用验证了问题符号存在且是非静态的,但我仍然得到错误。我也尝试删除并重建目标文件;它没有帮助。我怀疑这个问题与我的链接有关。为了记录,这里是:
clang++ -fPIC -Wl,--dll,--compat-implib,--nxcompat,--dynamicbase -shared \
-o pthread.dll pthread.o -lkernel32 -lmsvcrt
我做错了什么?
答案 0 :(得分:0)
这种行为显然是由于Clang中的一个错误。我开发的解决方法是:
__declspec(dllexport)
(但不是__declspec(dllimport)
)语句。pthread.dll
重新编译库。即使没有导入库,GNU ld也足够聪明,可以动态生成一个,这要归功于我的源代码中的__declspec(dllimport)
语句。