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
时间: 2023-07-23 20:20:30 浏览: 187
这个错误是由于在编译时缺少 -fPIC 选项导致的。-fPIC 选项是编译动态链接库时必须加上的选项之一。在重新编译时,你需要使用以下命令:
```
gcc -fPIC -c *.c
ar rcs libxxx.a *.o
gcc -shared -o libxxx.so *.o
```
这将在编译时添加 -fPIC 选项,并生成静态链接库和动态链接库。
相关问题
:libxxx.so cannot open shared object file No such file or directory
这个错误通常发生在找不到共享库文件的情况下。共享库文件是二进制程序依赖的文件,它们提供了程序运行所需的功能。出现这个错误可能是因为共享库文件没有正确安装或者没有在正确的路径下。
要解决这个问题,你可以尝试以下几个步骤:
1. 确保共享库文件已经正确安装。可以通过运行 `apt-get install` 或者其他合适的包管理器来安装缺失的库文件。
2. 检查共享库文件是否在程序运行时所需的路径下。你可以通过设置 LD_LIBRARY_PATH 环境变量来指定共享库文件的路径。
例如,在命令行中运行以下命令来设置 LD_LIBRARY_PATH 环境变量:
```
export LD_LIBRARY_PATH=/path/to/library
```
这将把 `/path/to/library` 替换为共享库文件所在的实际路径。
3. 如果你无法找到共享库文件,可以尝试重新安装包含该库文件的软件包。
如果以上步骤都没有解决问题,可能需要考虑其他原因,比如共享库文件是否被损坏或者程序是否正确链接到该共享库文件。在这种情况下,你可能需要进一步调查和排除故障。
/usr/bin/ld: cannot find -lfreetyped
根据引用[1]和引用的内容,当编译程序时出现"/usr/bin/ld: cannot find -lxxx"的错误时,意味着编译器无法找到名为"libxxx.so"或"libxxx.a"的库文件。在这种情况下,我们需要确保库文件存在于正确的路径中。
对于"/usr/bin/ld: cannot find -lfreetype"的错误,我们需要确保freetype库文件存在于正确的路径中。可以按照以下步骤进行操作:
1. 首先,确认你已经安装了freetype库。可以使用以下命令来检查:
```shell
dpkg -l | grep freetype
```
2. 如果freetype库未安装,可以使用以下命令来安装:
```shell
sudo apt-get install libfreetype6-dev
```
3. 如果freetype库已安装,但是编译器仍然无法找到它,可能是因为库文件路径不正确。可以尝试将库文件拷贝到正确的路径中。假设你已经找到了freetype库文件"libfreetype.so"或"libfreetype.a",可以使用以下命令将其拷贝到/usr/lib/目录中:
```shell
sudo cp /path/to/libfreetype.so /usr/lib/
```
4. 完成上述步骤后,重新编译程序,应该不再出现"/usr/bin/ld: cannot find -lfreetype"的错误。
阅读全文