当遇到not a dynamic executable时怎么做

当我使用ldd查找Drcom所缺少的32为库的时候提示not a dynamic executable

最后网上找到答案

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

内容如下

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]
附上readelf的使用

readelf命令是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用,下面以ELF格式可执行文件test为例详细介绍:

readelf -v

显示版本

readelf -h

显示帮助

readelf -a test

显示test的全部信息

readelf -h test
显示test的ELF Header的文件头信息(就是ELF文件开始的前52个字节)

readelf -l test
显示test的Program Header Table中的每个Prgram Header Entry的信息(如果有)

readelf -S test
显示test的Section Header Table中的每个Section Header Entry的信息(如果有)

readelf -g test
显示test的Section Group的信息(如果有)

readelf -s test
显示test的Symbol Table中的每个Symbol  Table Entry的信息(如果有)

readelf -e test

显示test的全部头信息(包括ELF Header,Section Header和Program Header,等同与 readelf -h -l -S test)

readelf -n test

显示test的note段的信息(如果有)

readelf -r test

显示test中的可重定位段的信息(如果有)

readelf -d test

显示test中的Dynamic Section的信息(如果有)

readelf -V test

显示test中的GNU Version段信息(如果有)

其实上述的命令只是把ELF文件格式的不同部分输出而已,只要了解ELF文件格式后这些命令就不难了啦~~


找了一下,
代码:$ 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原文链接: https://www.cnblogs.com/reddusty/p/5392398.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/231914

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午3:14
下一篇 2023年2月13日 下午3:14

相关推荐