2013-04-28 44 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)聲明。