我有同样的问题,而且大部分都解决了。
问题是,一些 so 文件不包含可链接代码,但包含 ld 链接器脚本。如果此链接描述文件包含绝对引用,则链接将失败。
我编写了一个小的 perl 脚本,它将所有符号链接转换为相对链接,并将 so 链接器脚本修补为相对路径。
手动操作非常好,自动化过程使用 perl 生成一个 tar 文件 - 无需在树莓文件系统上进行更改。
tar 将在主机上的 sysroot 文件夹中解压缩,所有链接都已修复,所有 so 文件都已修复。
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 文件,一切都是相对正确的。
Tar 将相对符号链接更改为绝对符号链接