繁体   English   中英

g ++将静态库链接到动态库(不带-fPIC)

[英]g++ linking a static library into a dynamic library (without -fPIC)

我试图使用以下方法将g ++与静态库(staticLib.a)链接到动态库(dynamicLib.so)中:

g++  *.o -Wl,--whole-archive staticLib.a -Wl,--no-whole-archive -shared -o dynamicLib.so

我得到了与此处相同的错误:

/ usr / bin / ld:staticLib.a(object.o):在创建共享对象时,不能使用针对`.rodata'的重定位R_X86_64_32; 使用-fPIC staticLib.a(object.o)重新编译:添加符号错误:错误值collect2:错误:ld返回1退出状态

我读了几个主题,但我找不到我要找的答案。 staticLib.a未编译为与位置无关的代码 (PIC)。 根据上面链接 ,它似乎是强制性的。 但是,staticLib.a是来自另一个我无法控制的项目的库。

我的第一个想法是*.o using ar -x提取对象*.o using (如第二个链接中所述 )。 但问题仍然是对象未使用-fPIC编译。

我的第二个想法是创建我自己的Makefile以在我的项目中使用-fPIC重新编译staticLib.a(我不想搞乱现有的项目)。 但我不确定这是一个好方法......

所以我的问题如下: 有没有可能的方法将静态库(没有-fPIC编译)链接到动态库?

相关话题:

所以我的问题如下:有没有可能的方法将静态库(没有-fPIC编译)链接到动态库?

由于提供与位置无关的代码需要编译,实际上不可能更改已编译的代码。 从理论上讲,您可以从二进制文件中反向设计源代码并重新编译,但这将是完全无效的解决方案。 因此,您必须(重新)编译原始项目并传递-fPIC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM