使用静态库编译的共享库中的未定义符号

时间:2014-07-24 10:48:46

标签: c linker shared-libraries static-libraries inclusion

我在一个可执行项目中使用它将不同的库链接在一起时遇到了问题。

让我们说项目A包含一个名为foo()的函数;它被编译为静态库 项目B包含一个名为bar()的函数,包含来自A的标头,并编译为包含-Wl--whole-archive libA.a -Wl--no-whole-archive flags的共享库。
libB.so已移至/usr/lib

现在,项目C包括B.h,调用bar(),但由于未定义引用foo()函数的原因而没有编译,这是在项目A中定义的。

nm libB.so说:

U foo

我使用的是gcc,编程语言是C,IDE是Eclipse CDT。

是否有人有想法或提示解决此问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

感谢Icarus3的贡献,问题受到限制。

ProjectA中的某些函数使用了restrict关键字,因此使用-std = gnu99进行编译。事实证明,从代码中删除此关键字并从编译命令中删除-std = gnu99最终解决了问题。