dynamic executable但ldd显示not a dynamic executable的解决办法

转载自:
http://forum.ubuntu.org.cn/viewtopic.php?t=462532

--------------------------------------------- 我是分割线 -------------------------------------

一个32位的可执行文件DrClientLinux, 在我的64位系统上无法运行.

点击(此处)折叠或打开

  1. $ ./DrClientLinux
  2. -bash: ./DrClientLinux: No such file or directory

查看可执行文件类型:

点击(此处)折叠或打开

  1. $ file ./DcClientLinux

查看可执行文件依赖库:

点击(此处)折叠或打开

  1. $ ldd DrClientLinux
  2. not a dynamic executable
本来想把这个文件缺少的32动态连接库都装齐,但是这ldd无法显示, ldd是看这个可执行二进制文件依赖依赖哪些动态链接库的。


网上找到答案:

点击(此处)折叠或打开

  1. $ readelf -l DrClientLinux | grep ld-linux
  2. [Requesting program interpreter: /lib/ld-linux.so.2]

找了一下
,没找到:

点击(此处)折叠或打开

  1. $ locate ld-linux.so.2

再找一下:

点击(此处)折叠或打开

  1. $ locate ld-linux
  2. /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
  3. /lib64/ld-linux-x86-64.so.2

所以知道缺少32位版本,于是:

点击(此处)折叠或打开

  1. $ sudo apt-get install libstdc++6:i386

再次找ld-linux:

点击(此处)折叠或打开

  1. $ sudo updatedb
  2. $ locate ld-linux.so.2
  3. /lib/ld-linux.so.2
  4. /lib/i386-linux-gnu/ld-linux.so.2

再次对它ldd:

点击(此处)折叠或打开

  1. $ ldd DrClientLinux
  2.    linux-gate.so.1 => not found
  3.    libSM.so.6 => not found
  4.    libICE.so.6 => not found
  5.    libXi.so.6 => not found
  6.    libXrender.so.1 => not found
  7.    libXrandr.so.2 => not found
  8.    libXcursor.so.1 => not found
  9.    libXinerama.so.1 => not found
  10.    libfreetype.so.6 => not found
  11. ....

返回的就是它需要的动态链接库了, 找到其中not found的项, 如:

点击(此处)折叠或打开

  1. libSM.so.6 => not found

使用命令安装:

点击(此处)折叠或打开

  1. $ sudo apt-get install libSM6:i386

可以发现, 安装的包的名字由缺少的库的 名字+版本+:+类型 决定的, 如 libfreetype.so.6 对应的包就是 libfreetype6:i386
就是这样把所有not found的库都装上, 这样这个二进制程序应该就可以使用了.
对于我这个程序, 执行完下面的命令就会看到登录窗口了.

点击(此处)折叠或打开

  1. ./DrClientLinux

End!












请使用浏览器的分享功能分享到微信等