gcc:无法创建。因此,从对象文件

gcc:无法创建。因此,从对象文件,c,gcc,shared-libraries,C,Gcc,Shared Libraries,我正在尝试从*.o文件创建.so动态库,并面临以下问题 日志: [nptemp static]$gcc-shared*.o-o libexample.so /usr/bin/ld:bindings\u hubbub\u parser.o:relocation R\u X86\u 64\u 32对“.rodata.str1.8”进行重新定位在创建共享对象时不能使用;用-fPIC重新编译 绑定\u hubbub\u解析器。o:无法读取符号:错误值 collect2:ld返回了1个退出状态 有什么想

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

日志:

[nptemp static]$gcc-shared*.o-o libexample.so
/usr/bin/ld:bindings\u hubbub\u parser.o:relocation R\u X86\u 64\u 32对“.rodata.str1.8”进行重新定位在创建共享对象时不能使用;用-fPIC重新编译
绑定\u hubbub\u解析器。o:无法读取符号:错误值
collect2:ld返回了1个退出状态
有什么想法吗?我是否需要使用指定的选项重新编译整个源代码

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

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

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

(如果不是为构建共享库而设计的,您可能需要编辑或以某种方式配置;如果构建某个库,您可能需要向其作者或社区寻求帮助)

共享库希望拥有。因此,您需要编译他们的源代码,将
-fPIC
标志传递给
g++
gcc
(请参阅)。您还可以希望显式地显示

阅读德雷珀的论文:

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

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

(如果不是为构建共享库而设计的,您可能需要编辑或以某种方式配置;如果构建某个库,您可能需要向其作者或社区寻求帮助)

共享库希望拥有。因此,您需要编译他们的源代码,将
-fPIC
标志传递给
g++
gcc
(请参阅)。您还可以希望显式地显示


阅读德雷珀的论文:。

ld
在错误消息中为您提供了确切的解决方案:
使用-fPIC重新编译
您的意思是再次重新编译源代码?意味着在运行make时,我是否需要指定选项-fPIC?@jerry不是在运行make时,您的makefile应该在创建对象文件时将其传递给编译器。静态库不需要它。在中,我通过为对象文件使用不同的名称来解决这个问题,用于共享库的文件的后缀是
\u.o
。当然,这只是一种可能的处理方法。是的,菲利克斯。。。我在make文件中做了更改。我现在可以得到动态库了。谢谢。
ld
在错误消息中为您提供了确切的解决方案:
使用-fPIC重新编译
您的意思是再次重新编译源代码?意味着在运行make时,我是否需要指定选项-fPIC?@jerry不是在运行make时,您的makefile应该在创建对象文件时将其传递给编译器。静态库不需要它。在中,我通过为对象文件使用不同的名称来解决这个问题,用于共享库的文件的后缀是
\u.o
。当然,这只是一种可能的处理方法。是的,菲利克斯。。。我在make文件中做了更改。我现在可以得到动态库了。谢谢。谢谢…我在CFALGS变量下添加了-fPIC。能够建造。所以图书馆。现在我只想知道这个库的版本。。我们怎样才能得到这个库的版本。这应该是你的问题(可能还有另一个问题),而不是这里。同样,您需要提供更多的细节(特别是,您正在构建的确切库)。版本的概念是特定于库的。谢谢…我在CFALGS变量下添加了-fPIC。能够建造。所以图书馆。现在我只想知道这个库的版本。。我们怎样才能得到这个库的版本。这应该是你的问题(可能还有另一个问题),而不是这里。同样,您需要提供更多的细节(特别是,您正在构建的确切库)。版本的概念是特定于库的。