【发布时间】:2011-04-04 10:52:21
【问题描述】:
我正在尝试将静态库 (.a) 文件与据称使用库中的符号的 .o 文件链接。但是,当使用 gcc 时 - 出现正常的链接器错误,无论使用 .a 文件作为
gcc -L。 a.c 静态库.a
但是,相同的命令可以完美地与 g++ 一起使用。
为什么会这样?
我可以看到 .c 文件是完全合法的 c(因此也是 c++),但是为什么 gcc 不能检测库中的符号?
尝试使用 objdump 在库中查找符号,能够找到非常相似的符号,但不是精确的符号。例如:
得到 00000000000000b0 g F .text 000000000000004e _*Z15PhttsFn_InitTTSPh* 对于符号 *PhttsFn_InitTTS*
有人可以解释一下这种现象吗?我还检查了编译库文件的架构,它与我的架构相同。
谢谢!
【问题讨论】:
-
看起来你的库是用 C++ 编译的,因此符号名称是“损坏的”,入口点只能由 C++ 代码访问。
-
"完全合法的 c (以及 c++)" C 不是 C++ 的子集。
-
感谢 Paul 的回答 :) Mathepic,抱歉 - 我看到的词选择不当 - 现在我想起来了,一些合法的 C 代码在 C++ 中是非法的,比如将 void 指针分配给另一个指针种类等