【编译和链接二】bash: ./test.out: /lib/ld64.so.1: bad ELF interpreter: 没有那个文件或目录
- 一、问题起因
- 二、ldd查看
- 三、解决方案一:使用gcc链接
- 四、查找其他解决方案
- 五、解决方案二:软链接
- bash: ./test.out: /lib/ld64.so.1: bad ELF interpreter: 没有那个文件或目录
一、问题起因
- 新建项目
#include<stdio.h>
int main()
{printf("hello world\n");
}
- ld链接
在【编译原理一】预处理、编译、汇编、链接文章中,ld链接完成后,执行hello.out时,报错如下
bash: ./test.out: /lib/ld64.so.1: bad ELF interpreter: 没有那个文件或目录
二、ldd查看
- 查看目录/lib目录,
/lib目录下确实是没有ld64.so.1
发现是需要/lib/ld64.so.1这个库的,而上面查看的out的对应库为/lib64/ld-linux-x86-64.so.2,这其实就是两个文件要加载的解释器,两个解释器是同一个库文件,但不知为何手动链接生成的out1并非直接访问该库,而是想要使用/lib/ld64.so.1软链接。
三、解决方案一:使用gcc链接
gcc链接
gcc hello.o -o hello
- 分析
可能是ld链接,需要手动制定一些库,而gcc不需要。具体原因未知。
四、查找其他解决方案
查找到的解决方案如下三篇文章
1、关于在64位Linux系统下运行32位程序时报:/lib/ld-linux.so.2:bad ELF interpreter:没有那个文件或目录。。。的问题解决
2、bad ELF interpreter: No such file or directory
3、关于ldd中存在的c ++:ld64.so,在运行时丢失
4、解决linux安装软件:/lib/ld-linux.so.2: bad ELF interpreter问题
尝试安装命令如下,仍然没能把问题解决
yum install glibc.i686
yum install libstdc++.so.6
yum install ld-linux.so.2
所以,继续寻找其他解决方案。
五、解决方案二:软链接
- 参考:linux的c语言编译链接过程(gcc,ld),出现没有这个文件或目录及段错误的解决
解决方法:
/lib64/ld-linux-x86-64.so.2这个文件建立一个软链接/lib/ld64.so.1
sudo ln -s /lib64/ld-linux-x86-64.so.2 /lib/ld64.so.1