/usr/bin/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/5.3.1/../../../../arm-linux-gnueabihf/bin/ld: buffer_frame.o: relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC buffer_frame.o: error adding symbols: 错误的值 collect2: error: ld returned 1 exit status
时间: 2023-07-23 18:20:29 浏览: 76
这个错误是由于在编译时缺少 -fPIC 选项导致的。-fPIC 选项是编译动态链接库时必须加上的选项之一。在重新编译时,你需要使用以下命令:
```
gcc -fPIC -c buffer_frame.c -o buffer_frame.o
gcc -shared buffer_frame.o -o libbuffer_frame.so
```
这将在编译时添加 -fPIC 选项,并生成一个名为 libbuffer_frame.so 的动态链接库。
相关问题
ar x libxxx.a gcc -shared -o libxxx.so *.o报错/usr/bin/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/5.3.1/../../../../arm-linux-gnueabihf/bin/ld: buffer_frame.o: relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC buffer_frame.o: error adding symbols: 错误的值 collect2: error: ld returned 1 exit status
这个错误是由于在编译时缺少 -fPIC 选项导致的。-fPIC 选项是编译动态链接库时必须加上的选项之一。在重新编译时,你需要使用以下命令:
```
gcc -fPIC -c *.c
ar rcs libxxx.a *.o
gcc -shared -o libxxx.so *.o
```
这将在编译时添加 -fPIC 选项,并生成静态链接库和动态链接库。
sudo nano /usr/arm-linux-gnueabihf/lib/crti.o都是乱码
抱歉,我的回答有误。在 /usr/arm-linux-gnueabihf/lib/ 目录下找不到 crt1.o 文件。正确的文件路径应该是 /usr/arm-linux-gnueabihf/libc/usr/lib/arm-linux-gnueabihf/crti.o。以下是正确的步骤:
1. 打开文件 /usr/arm-linux-gnueabihf/libc/usr/lib/arm-linux-gnueabihf/crti.o,使用以下命令打开文件:
```
sudo nano /usr/arm-linux-gnueabihf/libc/usr/lib/arm-linux-gnueabihf/crti.o
```
2. 在打开的文件中查找 ld-linux-armhf.so.3,并将其替换为 ld-linux.so.3。
3. 保存文件并退出。
现在,arm-linux-gnueabihf-gcc 将优先使用 ld-linux.so.3 而不是 ld-linux-armhf.so.3。