relocation R_X86_64_32S against `.data' can not be used when making a shared object; recompile with -fPIC
时间: 2024-01-13 21:09:02 浏览: 155
这个错误通常出现在编译共享对象时,它意味着您的代码中存在对全局变量的非法引用。在编译共享对象时,所有的全局变量都需要使用PIC(位置无关代码)来访问,以便在运行时能够正确地绑定地址。因此,您需要重新编译代码并使用-fPIC选项来生成PIC代码。您可以在编译命令中添加-fPIC选项,例如:
```
gcc -shared -o libexample.so example.o -fPIC
```
这将重新编译您的代码并生成一个新的共享对象libexample.so,其中包含位置无关代码。
相关问题
linux make libperl.a(mathoms.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPI
这个错误信息是在使用make命令编译生成静态库libperl.a时出现的,它提示你在生成共享对象时不能使用R_X86_64_32S重定位类型。建议你使用-fPIC选项重新编译该源文件,以便生成一个位置无关的代码。可以尝试在Makefile文件中添加以下选项:
```
CFLAGS += -fPIC
```
如果还有其他的对象文件需要编译,也需要添加相同的选项,例如:
```
OBJCFLAGS += -fPIC
```
这样应该能够解决这个问题。
oracle linux make /usr/local/perl-5.36.1/lib/5.36.1/x86_64-linux/CORE/libperl.a relocation R_X86_64_32S against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
这个错误是由于尝试使用非位置独立代码(non-position independent code)来编译共享库(shared object)时引起的。在这种情况下,编译器建议您使用 -fPIC 选项重新编译 Perl 库。
您可以将以下命令添加到您的编译命令中:
```
CFLAGS=-fPIC ./Configure -des -Duseshrplib -Dprefix=/usr/local/perl-5.36.1
```
这将使用 -fPIC 标志重新编译 Perl 库并生成一个位置独立的库,解决该错误。
阅读全文