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

C++ g++;将静态库链接到动态库(不带-fPIC),c++,g++,static-linking,dynamic-linking,C++,G++,Static Linking,Dynamic Linking,我正在尝试使用以下方法将g++静态库(staticLib.a)链接到动态库(dynamicLib.so): 我得到的错误与: /usr/bin/ld:staticLib.a(object.o):根据 `.rodata在创建共享对象时不能使用;重新编译 -fPIC staticLib.a(object.o):添加符号时出错:错误值集合2:错误:ld返回1退出状态 我读了好几个主题,但我找不到我想要的答案。 staticLib.a未编译为位置独立代码(PIC)。根据政府的规定,这似乎是强制性的。但是

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

我得到的错误与:

/usr/bin/ld:staticLib.a(object.o):根据 `.rodata在创建共享对象时不能使用;重新编译 -fPIC staticLib.a(object.o):添加符号时出错:错误值集合2:错误:ld返回1退出状态

我读了好几个主题,但我找不到我想要的答案。 staticLib.a未编译为位置独立代码(PIC)。根据政府的规定,这似乎是强制性的。但是,staticLib.a是另一个项目中的库,我无法控制它

我的第一个想法是使用ar-x(如上所述)提取对象
*.o。但问题仍然是,该对象不是使用
-fPIC
编译的

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

所以我的问题是:有没有任何可能的方法将静态库(编译时没有
-fPIC
)链接到动态库

相关主题:

所以我的问题是:有没有任何可能的方法将静态库(编译时没有-fPIC)链接到动态库


由于提供独立于位置的代码需要编译,实际上不可能更改已编译的代码。从理论上讲,您可以从二进制代码逆向工程源代码并重新编译,但这将是完全无效的解决方案。因此,您必须(重新)编译通过-fPIC的原始项目。

这是我担心的。谢谢你的回复。我也很害怕,因为我使用boost
g++  *.o -Wl,--whole-archive staticLib.a -Wl,--no-whole-archive -shared -o dynamicLib.so