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的论文: 如何编写共享库 。