我在一个可执行项目中使用它将不同的库链接在一起时遇到了问题。
让我们说项目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。
是否有人有想法或提示解决此问题?
谢谢。
答案 0 :(得分:0)
感谢Icarus3的贡献,问题受到限制。
ProjectA中的某些函数使用了restrict关键字,因此使用-std = gnu99进行编译。事实证明,从代码中删除此关键字并从编译命令中删除-std = gnu99最终解决了问题。