2013-04-28 86 views
0

我想在Windows上使用binutils ld版本2.21链接一个小的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

此行为显然是由于Clang中的错误。我公司开发的解决方法是:

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