【问题标题】:Using uclibc linker for glibc compiled binary?将 uclibc 链接器用于 glibc 编译的二进制文件?
【发布时间】:2017-10-07 13:15:45
【问题描述】:

我有一个二进制文件,我需要在使用 uclibc 的嵌入式系统上工作,该二进制文件是针对 glibc 编译的,这应该工作吗?

当我尝试运行二进制文件时,我收到一条错误消息,指出二进制文件不存在,因此我检查了缺少哪些库。

libc6: /lib/x86_64-linux-gnu/libdl.so.2
libc6: /lib/x86_64-linux-gnu/librt.so.1
libc6: /lib/x86_64-linux-gnu/libm.so.6
libc6: /lib/x86_64-linux-gnu/libc.so.6
libc6: /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
libc6: /lib/x86_64-linux-gnu/libnsl.so.1

我能够将所有这些符号链接到我系统上的版本(旧版本,但我希望它可以工作,因为二进制文件不需要这些新版本):

libc6: /lib/x86_64-linux-gnu/libdl.so.2      --------------------- ln -s /lib/libdl-0.9.33.2.so libdl.so.2
libc6: /lib/x86_64-linux-gnu/librt.so.1      --------------------- ln -s /lib/librt-0.9.33.2.so librt.so.1
libc6: /lib/x86_64-linux-gnu/libm.so.6       --------------------- ln -s /lib/libm.so.0 libm.so.6
libc6: /lib/x86_64-linux-gnu/libc.so.6       --------------------- ln -s /lib/libc.so.0 libc.so.6 
libc6: /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ---------------- 
libc6: /lib/x86_64-linux-gnu/libnsl.so.1     --------------------- ln -s /lib/libnsl-0.9.33.2.so libnsl.so.1

ld-linux-x86-64.so.2 不存在(也没有任何库可供我指向,例如 ld-2.19.so,它在我的主机上指向它),这是一个 glibc 特定的链接器吗?我有/lib/ld64-uClibc.so.0///lib/ld64-uClibc-0.9.33.2.so,但符号链接没有效果(仍然得到No such file or directory),这是正确的做法还是我需要以某种方式将ld-linux-x86-64.so.2内置到系统中?

【问题讨论】:

    标签: linux shared-libraries ld glibc uclibc


    【解决方案1】:

    这应该有效吗?

    没有。

    ld-linux-x86-64.so.2 不存在...这是 glibc 特定的链接器吗?

    是的:ld-linux 是 GLIBC 的一部分。它的路径被硬编码到二进制文件中(参见readelf -l a.out 输出)。

    我是否需要以某种方式将 ld-linux-x86-64.so.2 内置到系统中?

    你有两个选择:

    1. 针对 uClibc 重建您的二进制文件,或者
    2. 安装完成 GLIBC(您需要的不仅仅是ld-linux;您还需要libc.so.6libdl.so.2等)

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 1970-01-01
      • 2019-07-08
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多