首页 文章

g libc.so绝对路径交叉编译错误

提问于
浏览
1

我正在使用gcc-linaro-arm-linux-gnueabihf-4.8-2013.07-1_linux工具在ubuntu pc上交叉编译arm目标 .

如果将libc.so放置在库搜索路径中的目标中,则链接器会出错:

cannot find /lib/arm-linux-gnueabihf/libc.so.6

如果我删除了这个libc.so,那么链接过程就完成了,没有错误 .

似乎libc.so库中的绝对路径可能存在符号链接 . 这是我收到链接器错误的原因吗?

如果是,是否有办法修改符号链接?

1 回答

  • 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文件,则一切都是相对正确的 .

    Tar changes relative symlinks to absolute symlinks

相关问题