首页 > 解决方案 > gcc:无法从目标文件创建 .so

问题描述

我正在尝试从 *.o 文件创建 .so 动态库并面临以下问题。

日志:

[nptemp-static]$ gcc -shared *.o -o libexample.so

/usr/bin/ld: bindings_hubbub_parser.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
bindings_hubbub_parser.o: could not read symbols: Bad value
collect2: ld returned 1 exit status

任何想法?我是否需要使用指定的选项重新编译我的整个源代码?

实际上,我不知道我编译的源代码,因为所有源代码都是开源的,我按照自述文件中的说明下载和编译。

标签: cgccshared-libraries

解决方案


我正在尝试从 *.o 文件创建 .so 动态库并面临以下问题。

这不是那么简单。在实践中,您应该在制作共享库时专门编译,至少在 Linux 上是这样。

(如果它不是为构建共享库而设计的,您可能需要以Makefile某种方式编辑或配置您的构建自动化;如果构建一些免费软件库,您可能会向其作者或社区寻求帮助)

共享库希望拥有独立于位置的代码。因此,您需要使用传递给 or 的标志来编译它们的源代码(请-fPIC参阅this 。您可能还想明确rpathg++gcc

阅读 Drepper 的论文:如何编写共享库


推荐阅读