relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC怎么解决
时间: 2023-06-26 19:10:17 浏览: 135
这个错误通常是由于链接库时使用了非位置独立代码(non-position independent code)导致的。在编译时,需要加上 `-fPIC` 参数以生成位置独立代码,例如:
```
gcc -shared -o libexample.so example.o -fPIC
```
如果你使用的是 Makefile,可以将 `-fPIC` 添加到 CFLAGS 中:
```
CFLAGS += -fPIC
```
如果以上方法还是无法解决问题,可以尝试在链接时添加 `-shared` 参数,例如:
```
gcc -o example example.o -shared
```
希望能对你有所帮助!
相关问题
relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
这个错误通常是因为编译时没有使用 -fPIC 选项生成位置无关代码(PIC)。位置无关代码可以被动态链接库使用,但是缺少此选项会导致链接错误。
要解决此问题,请重新编译您的代码并使用 -fPIC 选项。例如,在使用 gcc 编译器时,您可以将以下命令添加到编译命令中:
```
gcc -fPIC -c yourfile.c
```
这将生成一个位置无关的目标文件,然后您可以将其链接到共享库中。
如果您正在使用 Makefile 来编译,可以在 CFLAGS 变量中添加 -fPIC 选项,如下所示:
```
CFLAGS=-fPIC
your_target: your_source_files
gcc $(CFLAGS) -o your_target your_source_files
```
这将确保在编译时使用 -fPIC 选项。
relocation R_X86_64_32S against `.data' can not be used when making a shared object; recompile with -fPIC
这个错误通常出现在编译共享对象时,它意味着您的代码中存在对全局变量的非法引用。在编译共享对象时,所有的全局变量都需要使用PIC(位置无关代码)来访问,以便在运行时能够正确地绑定地址。因此,您需要重新编译代码并使用-fPIC选项来生成PIC代码。您可以在编译命令中添加-fPIC选项,例如:
```
gcc -shared -o libexample.so example.o -fPIC
```
这将重新编译您的代码并生成一个新的共享对象libexample.so,其中包含位置无关代码。