这是C中的Hello World代码:
// a.c
#include <stdio.h>
int main() {
printf("Hello world\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我将其编译为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
Run Code Online (Sandbox Code Playgroud)
我用Google搜索了这个错误,似乎当生成的可执行文件是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
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
编辑:
输出 uname -m
$ uname -m
x86_64
Run Code Online (Sandbox Code Playgroud)
输出 ldd a.out
$ ldd a.out …Run Code Online (Sandbox Code Playgroud)