zoukankan      html  css  js  c++  java
  • 当遇到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
  • 相关阅读:
    Android WebView使用
    Android
    Instant Buy Android API Tutorial
    cocos2dx 手势识别
    cocos2d-x 判断两条直线是否相交
    golang 环境bash 以及shell
    技术描述
    golang web开发获取get、post、cookie参数
    Linux curl 模拟form表单提交信息和文件
    Golang HTTP文件上传
  • 原文地址:https://www.cnblogs.com/reddusty/p/5392398.html
Copyright © 2011-2022 走看看