我正在尝试使用以下方式将静态库(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): 重定位 R_X86_64_32 对`.rodata'无法在制作共享对象时使用; 重新编译使用 -fPIC staticLib.a(object.o): 错误添加符号: 值无效 collect2: error: ld 返回 1 exit status
我看了几个主题,但没有找到我想要的答案。staticLib.a没有编译为位置无关代码(PIC)。根据上面的链接,这似乎是强制性的。然而,staticLib.a是另一个项目的库,我无法控制。
我的第一个想法是使用ar -x
提取对象*.o
(如第二个链接中所述)。但问题仍然存在,因为该对象未使用-fPIC
进行编译。
-fPIC
(我不想弄乱现有项目)。但我不确定这样做是否好...所以我的问题是:有没有可能将静态库(未使用-fPIC
编译)链接到动态库中?相关主题: