我想鏈接靜態庫(.a)文件與.o文件,它應該使用庫中的符號。但是,使用gcc時 - 正常的鏈接器錯誤出現,無論使用.a文件爲g ++ vs gcc,鏈接問題與靜態庫(.a)
gcc -L。 a.c staticlib.a
但是,相同的命令完美地工作於g ++。
這是怎麼發生的?
我可以看到.c文件是完全合法的c(因此C++),但爲什麼gcc不能檢測庫中的符號?
嘗試使用objdump查找庫中的符號,能夠找到非常相似的符號,但不是確切的符號。 e.g:
了 00000000000000b0 G + F的.text 000000000000004e _ * Z15PhttsFn_InitTTSPh * 的符號* PhttsFn_InitTTS *
是否有人可以解釋這種現象?我也檢查過編譯庫文件的體系結構,它與我的體系結構相同。
謝謝!
它看起來像你的庫被編譯爲C++,因此符號名稱被「破壞」,並且入口點只能被C++代碼訪問。 – 2011-04-04 10:55:14
「完全合法的c(因此C++)」C不是C++的子集。 – alternative 2011-04-04 10:55:44
感謝您的答案保羅:) Mathepic,對不起 - 我看到的單詞的選擇很差 - 現在我想起了一些合法的C代碼在C++中是非法的,例如void指針賦值給另一種類型的指針等 – Anonymous 2011-04-04 15:10:05