使用uclibc链接器为glibc编译的二进制文件?

时间:2017-05-09 09:34:34

标签: linux shared-libraries ld glibc uclibc

我有一个二进制文件,我需要在使用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以某种方式进入系统?

1 个答案:

答案 0 :(得分:1)

  

这应该有效吗?

没有

  

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

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

  

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

您有两种选择:

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