Debian12服务器运行同架构编译二进制文件提示‘not found’原因咨询
问题:同架构Debian 12服务器上执行编译好的二进制文件提示“not found”,该错误指什么?
我在Debian 12 x64服务器上运行一个在另一台同架构(Debian 12 x64)机器上编译的二进制文件,执行时返回“not found”错误,操作及输出如下:
/usr/src/app/bin # ls -la total 25412 drwxr-xr-x 1 root root 4096 Jul 24 10:28 . drwxr-xr-x 1 root root 4096 Jul 24 10:29 .. -rwxr-xr-x 1 root root 26003232 Jul 24 10:27 extrude_skeleton /usr/src/app/bin # chmod +x extrude_skeleton /usr/src/app/bin # ./extrude_skeleton /bin/sh: ./extrude_skeleton: not found /usr/src/app/bin #
请问此“not found”指的是什么?
这个“not found”不是指二进制文件本身找不到(从ls输出能确认文件存在且有执行权限),而是指该二进制文件依赖的动态链接器(程序加载器)或核心系统库找不到。
常见触发原因:
- 二进制为动态编译,依赖的某个核心系统库(如特定版本的glibc)在目标服务器上缺失,即便都是Debian 12,也可能因系统安装方式(比如最小化安装)导致组件差异。
- 编译时指定了非标准路径的动态链接器,目标服务器不存在该路径的链接器(例如使用自定义编译的glibc,链接器路径与系统默认不同)。
可以用以下命令排查具体问题:
- 查看二进制指定的动态链接器路径:
readelf -l extrude_skeleton | grep interpreter
输出会显示类似/lib64/ld-linux-x86-64.so.2的路径,检查目标服务器上该路径是否存在。
- 检查所有依赖库的状态:
ldd extrude_skeleton
如果有库标注not found,那就是缺失的依赖库导致了这个错误。
内容的提问来源于stack exchange,提问作者pcace
相关产品推荐
相关产品推荐

