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 

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

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

我试图从* .o文件创建.so动态库并面临下面的问题。

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

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

共享库希望具有与位置无关的代码 。 因此,您需要-fPIC传递给g++gcc-fPIC标志编译其源代码(请参阅此内容 )。 您还可以想要显示rpath 。

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