如何将libc.a链接到共享库中

时间:2014-07-17 01:38:40

标签: linux shared-libraries static-libraries static-linking

我有一个名为nvdebug.so的共享库,它是编译的结果。

我想将.so文件与libc.a链接

虽然我搜索了几乎所有的谷歌网站,但我找不到解决方案。

我认为'--whole-archive'命令是最适合解决的方法。

如果它运行良好,nvdebug.so文件大小必须增加,但它不能正常工作。

gcc -shared -Wl,-soname,nvdebug.so -o nvdebug.so -Wl,--whole-archive -L/usr/lib -lc -Wl,--no-whole-archive

我不知道我应该修改什么,-whole-archive和-shared命令的机制。

如果你们帮助我做什么,我真的很感激

1 个答案:

答案 0 :(得分:-1)

您无法将静态库链接到共享库,因为共享库必须包含与位置无关的代码,而静态库包含与位置相关的代码(称为"可重定位代码")。您最多会遇到链接器错误。所以,这是不可能的,唯一的选择是放弃并尝试别的东西。

注意

实际上可以使用与位置无关的代码编译静态库,这样就可以执行此操作,但这意味着重新编译libc.a,我假设它是非选项。编辑libc时,只需将-fPIC添加到CFLAGS即可。