0

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

我究竟做错了什么?

4

1 回答 1

0

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

  1. 从源代码中删除所有__declspec(dllexport)(但不是__declspec(dllimport))语句。
  2. 重新编译依赖于pthread.dll. 即使不再有导入库,GNU ld 也足够聪明,可以即时生成一个,这要归功于__declspec(dllimport)我的源代码中的语句。
于 2013-04-28T21:40:14.400 回答