导入库创建无效

时间:2013-04-28 17:41:36

标签: winapi ld

我正在尝试使用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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这种行为显然是由于Clang中的一个错误。我开发的解决方法是:

  1. 从源代码中删除所有__declspec(dllexport)(但不是__declspec(dllimport))语句。
  2. 根据pthread.dll重新编译库。即使没有导入库,GNU ld也足够聪明,可以动态生成一个,这要归功于我的源代码中的__declspec(dllimport)语句。