这是C语言的“Hello World”代码:
// a.c
#include <stdio.h>
int main() {
printf("Hello world\n");
return 0;
}
我使用gcc a.c
进行编译,得到了预期的a.out
文件,然后运行./a.out
,输出了Hello world
。
现在如果我分别进行编译和链接:gcc -c a.c; ld -lc a.o
,然后运行由a.out
生成的./a.out
,会得到以下信息:
bash: ./a.out: No such file or directory
我谷歌搜索了这个错误,似乎是由于生成的可执行文件是32位ELF格式,并且计算机架构是64位导致的。
我正在运行一台64位机器,并且运行file a.out
命令给出以下结果:
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
为什么会发生这种情况?
编辑:
uname -m
的输出结果
$ uname -m
x86_64
ldd a.out
的输出结果
$ ldd a.out
linux-vdso.so.1 => (0x00007ffeeedfb000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa13a7b8000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa13abab000)
gcc a.c
生成可执行文件a.out
并且运行正确。
uname -m
命令的输出是什么? - cadaniluk/bin/bash: /home/pratyaksh/temp/a.out: 没有那个文件或目录
。 - piggs_boson