相关疑难解决方法(0)

`bash:./ a.out:运行`ld`生成的可执行文件时没有这样的文件或目录`

这是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)

c linux linker gcc dynamic-linking

7
推荐指数
3
解决办法
2万
查看次数

标签 统计

c ×1

dynamic-linking ×1

gcc ×1

linker ×1

linux ×1