执行二进制 test1 时出现以下错误:
$ ./test1
bash: ./test1: cannot execute binary file: Exec format error
我检查了这个二进制文件上的“x”是否正确:
$ ls -la test1
-rwxrwxrwx 1 *** *** 5864 Apr 9 17:04 test1
我还验证了我的文件和我的 ubuntu 都可以在 x86-64 目标上运行:
$ file test1
test1: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), with debug_info, not stripped
$ uname -a
Linux ubuntu 5.3.0-46-generic #38~18.04.1-Ubuntu SMP Tue Mar 31 04:17:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
最后我的gcc版本是:
$ gcc --version
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
你能帮忙吗?
答案1
您使用的命令
gcc -g -Wall -c test1.c -o test1
创建二进制目标文件,而不是可执行文件。来自man gcc
:
When you invoke GCC, it normally does preprocessing, compilation, assembly and linking. The "overall options" allow you to stop this process at an intermediate stage. For example, the -c option says not to run the linker. Then the output consists of object files output by the assembler.
要创建可执行程序,您需要gcc
通过删除以下选项来允许进入链接阶段-c
:
gcc -g -Wall test1.c -o test1