相关疑难解决方法(0)

如果使用-fPIC构建目标文件,我怎么能用objdump之类的东西来判断?

如何使用类似的东西来判断objdump是否已经构建了一个目标文件-fPIC

gcc shared-libraries objdump fpic

53
推荐指数
2
解决办法
3万
查看次数

R_X86_64_32S和R_X86_64_64重定位是什么意思?

当我尝试在64位FreeBSD中编译C应用程序时出现以下错误:

在制作共享对象时不能使用重定位R_X86_64_32S; 用-fPIC重新编译

什么是R_X86_64_32S搬迁,什么是R_X86_64_64

我已经用Google搜索了错误,这可能是原因 - 如果有人能说出R_X86_64_32S的真正意义,那就太好了.

c compiler-construction linker elf relocation

49
推荐指数
3
解决办法
3万
查看次数

在构建期间将静态库链接到共享库?

我在使用GCC/Linux构建共享库时遇到问题.目前这个共享库是使用GCC/libtool选项"-shared"创建的,一切都很好.

现在还有两个额外的静态库(.a文件)必须添加到此共享库中,因为它们提供了共享库所需的一些功能.使用选项"-l"添加这些静态库没有帮助,之后它们不是.so文件的一部分.

那么我如何强制GCC/libtool真正将这些静态库的代码添加到共享库中呢?

谢谢!

linux gcc shared-libraries static-libraries libtool

16
推荐指数
1
解决办法
3万
查看次数

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

我试图使用以下方法将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)链接到动态库?

相关话题:

c++ g++ dynamic-linking static-linking

5
推荐指数
1
解决办法
2422
查看次数