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

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
恒河沙数1
帖子: 295
注册时间: 2013-04-27 19:26
系统: ubuntu+win7

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

#1

帖子 恒河沙数1 » 2014-07-31 11:17

DrCOM linux 版
DrClient linux 版

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

代码: 全选

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

代码: 全选

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


网上找到答案:

代码: 全选

$ readelf -l DrClientLinux | grep ld-linux
[Requesting program interpreter: /lib/ld-linux.so.2]
找了一下,

代码: 全选

$ locate ld-linux.so.2
没有返回
再找

代码: 全选

$ locate ld-linux
/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
/lib64/ld-linux-x86-64.so.2
所以知道缺少32位版本,于是

代码: 全选

$ sudo apt-get install libstdc++6:i386
再次找ld-linux

代码: 全选

$ sudo updatedb
$ locate ld-linux.so.2
/lib/ld-linux.so.2
/lib/i386-linux-gnu/ld-linux.so.2
再次对它ldd

代码: 全选

$ ldd DrClientLinux
	linux-gate.so.1 => not found
	libSM.so.6 => not found 
	libICE.so.6 => not found 
	libXi.so.6 => not found 
	libXrender.so.1 => not found 
	libXrandr.so.2 => not found 
	libXcursor.so.1 => not found
	libXinerama.so.1 => not found 
	libfreetype.so.6 => not found
....
返回的就是它需要的动态链接库了, 找到其中not found的项, 如

代码: 全选

libSM.so.6 => not found
.
使用命令安装:

代码: 全选

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

代码: 全选

./DrClientLinux
参考文章:http://superuser.com/questions/194254/w ... -to-run-it
上次由 恒河沙数1 在 2014-11-03 11:55,总共编辑 2 次。
头像
lhw828
帖子: 2797
注册时间: 2007-03-15 16:58
来自: 湖北武汉
联系:

Re: 明明是dynamic executable但ldd显示not a dynamic executable的解决办法

#2

帖子 lhw828 » 2014-11-01 21:19

这样的帖子,是论坛的宝贝
回复