0

我有一个二进制文件,我需要在使用 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它在我的主机 PC 上指向的内容),这是一个 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某种方式内置到系统中?

4

1 回答 1

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.6,libdl.so.2等)
于 2017-05-10T05:17:11.817 回答