【发布时间】:2020-03-09 12:46:05
【问题描述】:
我有一个 Linux 虚拟机。有一些信息。
uname -a:
Linux 05d57a817610 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
cat /proc/version:Linux version 4.4.0-131-generic (buildd@lgw01-amd64-015) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018
cat /etc/issue:Ubuntu 18.04.2 LTS \n \l
/*abc.c*/
#include<stdio.h>
int main(){
printf("Hello World\n");
return 0;
}
我使用了命令 gcc abc.c -o abc.o ,然后我得到了一个文件:abc.o 。它是可执行的。
当我使用命令:gcc abc.c -c 时,它生成了一个文件 abc.o 。然后我尝试使用命令:./abc.o,但它显示bash: ./abc.o: Permission denied。有了这个,我使用了命令chmod +x abc.o,然后我使用了命令./abc.o,它显示./abc.o: cannot execute binary file: Exec format error。
这个问题困扰了我很久,不知道为什么。谁能帮我?在此先感谢。对不起,我的英语不好。
当您解决问题时,您可能想知道一些信息。
file abc.o : abc.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
uname -m : x86_64
如果您想了解任何信息,请在评论中留言。非常感谢。
【问题讨论】:
-
为什么你希望能够执行一个目标文件?这不起作用,您必须先将这些链接到可执行二进制文件。
-
我认为 .o 文件不是您的可执行文件。我不知道Linux上的情况是否有所不同,所以我没有将其发布为答案。但在 Windows 上,.o 文件是链接到最终可执行文件的目标文件。你不能运行这些。
-
gcc abc.c -o abc同时进行编译和链接,因此当只有一个源文件时这是合适的。gcc abc.c -c只做了第一步,将源文件编译成目标文件。如果您有多个源文件,您会这样做;编译每一个,然后在最后一步将它们链接在一起:gcc abc.o ... -o abc以获取您的可执行文件。 -
您可能有一个
abc.exe,Windows 会选择并执行。当您键入abc时,Windows 会自动查找要执行的abc.exe。这可能会让您有些困惑。
标签: c++ c linux executable