我想链接静态库(.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