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



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

假设项目A包含一个名为foo()的函数;它被编译为一个静态库。
项目B包含一个名为bar()的函数,包含来自a的头文件,并与-Wl, --whole-archive libA.a -Wl, --no-whole-archive flags编译为共享库。
libB。so被移到/usr/lib .

现在,C项目包含B.h,调用bar(),但由于对项目a中定义的foo()函数的未定义引用的原因而未编译。

nm libB.so说:
U foo

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

谁有解决这个问题的主意或建议?

谢谢。

多亏了Icarus3的贡献,这个问题才得以解决。

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

相关内容

  • 没有找到相关文章

最新更新