关于ldd命令使用的一些问题总结

ldd 命令可以列出可执行程序依赖的动态库和动态库的路径。可以方便的协助查一些编译问题。
不过最近遇到一个执行ldd显示not a dynamic executable的问题。如下图
在这里插入图片描述

出现这种问题可能原因有多个。

  1. 文件确实不是可执行程序,或者不是动态库,在linux下即不是一个elf文件。例如把window下的程序拷贝到了linux下执行。
  2. 文件是32位的,系统是64位的,或者反过来,文件是64位的,系统是32位的。
  3. 文件是x86架构,但是系统是arm架构或者反过来,交叉编译的文件,经常会有这种问题。
    上面的3种情况可以通过file命令确认文件格式
    如下可以看到文件是elf格式,64位,X86-64位的文件,如果使用的系统与之匹配就没有问题。
    在这里插入图片描述
  4. 还有一种情况,也是最近遇到的,比较特殊,ldd的版本与编译程序的版本不一致。程序使用的是gcc 7.5的版本编译的,
    到实际环境上的ldd是10.3的gcc版本编译的。版本对应不上就出问题了。可以查看ldd的版本,与程序编译环境中ldd的版本比对是否一致。
    在这里插入图片描述

另外还有一种方式查看libc.so的版本 。ldd的版本即对应的libc.so的版本。可以通过运行libc.so查看版本,如下图。
这里涉及到一个比较有意思的点,libc.so即是一个动态库,又可以单独执行。有兴趣的同学可以了解一下。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yangcunbiao/article/details/125921690