我使用gcc-linaro-arm-linux-gnueabihf-4.8-2013.07-1_linux工具在ubuntu pc上交叉编译arm目标。
如果将libc.so放置在库搜索路径中的目标中,则链接器会出错:
找不到/lib/arm-linux-gnueabihf/libc.so.6
如果删除此libc.so,则链接过程完成且没有错误。
似乎libc.so库中的绝对路径可能存在符号链接。这是我收到链接器错误的原因吗?
如果有,是否有办法修改符号链接?
答案 0 :(得分:1)
我遇到了同样的问题并且大部分都解决了。
问题是,有些so文件不包含可链接代码,但包含ld链接描述文件。如果此链接描述文件包含绝对引用,则链接将失败。
我编写了一个小的perl脚本,它将所有符号链接转换为相对链接,并将所以链接器脚本修补为相对路径。
手工工作非常好,自动化过程使用perl生成tar文件 - 无需在raspberry文件系统上进行更改。
tar将在sysroot文件夹中的主机上解压缩,并且所有链接都是固定的,所有文件都被固定。
less /lib/arm-linux-gnueabihf/libc.so.6
你会看到:
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( /lib/arm-linux-gnueabihf/libc.so.6 /usr/lib/arm-linux-gnueabihf/libc_nonshared.a AS_NEEDED ( /lib/arm-linux-gnueabihf/ld-linux-armhf.so.3 ) )
在第一次测试时,我发现tar会将所有相对链接转换为绝对链接,但如果我列出tar文件,则一切都是相对正确的。