gcc:无法从目标文件创建.so

时间:2018-04-30 06:05:03

标签: c gcc shared-libraries

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

LOG:

[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中的说明下载和编译。

1 个答案:

答案 0 :(得分:2)

  

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

这不是那么简单。在实践中,您应该在创建共享library时编译具体,至少在Linux上。

(也许您可能需要编辑Makefile或以某种方式配置build automation,如果它不是为构建共享库而设计的;如果构建了一些free software库,则可能会向其作者或社区寻求帮助)

共享库希望拥有position independent code。因此,您需要将源代码with编译为传递给-fPICg++的{​​{1}}标记(请参阅this)。您还可以要明确rpath

阅读Drepper的论文:How To Write Shared Libraries