Nic*_*las 5 c++ g++ dynamic-linking static-linking
我试图使用以下方法将g ++与静态库(staticLib.a)链接到动态库(dynamicLib.so)中:
g++ *.o -Wl,--whole-archive staticLib.a -Wl,--no-whole-archive -shared -o dynamicLib.so
Run Code Online (Sandbox Code Playgroud)
我得到了与此处相同的错误:
/ 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 usingar -x(如第二个链接中所述).但问题仍然与未编译的对象相同-fPIC.
我的第二个想法是创建我自己的Makefile以-fPIC在我的项目中重新编译staticLib.a (我不想搞乱现有的项目).但我不确定这是一个好方法......
所以我的问题如下:有没有可能的方法将静态库(没有编译-fPIC)链接到动态库?
相关话题:
所以我的问题如下:是否有任何可能的方法将静态库(不带 -fPIC 编译)链接到动态库?
由于提供与位置无关的代码不需要编译,因此实际上不可能更改已编译的代码。理论上,您可以从二进制文件对源代码进行逆向工程并重新编译,但这将是完全无效的解决方案。因此,您必须通过 -fPIC 来(重新)编译原始项目。