#include <stdlib.h>
int main(int argc, char* argv[])
{
// printf("Hello World!\n");
return 0;
}
gcc --version
gcc(Ubuntu 7.3.0-16ubuntu3)7.3.0 版权所有(C)2017自由软件基金会,Inc. 这是免费软件;请参阅复制条件的来源。没有 保证;甚至不是出于适销性或针对特定目的的适用性。
gcc -O0 -g -o helloworld -c helloworld.c
这是今天从头开始构建的全新系统。 Ubuntu 18.04。
如果我制作了helloworld文件,但无法执行,请尝试运行该文件
$ chmod + x helloworld
$ ./helloworld
bash:./helloworld:无法执行二进制文件:Exec格式错误
但是似乎可以毫无问题地编译我的大型项目。
即使是全新系统,我也重新安装了gcc,但没什么区别。
答案 0 :(得分:1)
-c
标志指示gcc
将源文件转换为 object 文件,以便以后链接到可执行文件。
使目标文件可执行文件对尝试运行它没有任何帮助,您需要将其链接并生成一个 real 可执行文件。可能最简单的方法是从命令行中删除-c
。
如果您有一些更复杂的内容(例如,您希望分别编译多个源文件,然后将所有对象链接在一起),则-c
标志将很有用。
但是,由于您有要制作可执行文件的一个源文件,因此只需使用:
gcc -O0 -g -o helloworld helloworld.c
就其价值而言,this answer可能会提供有关生成可执行文件的各个阶段的更多信息。它专门涵盖了静态链接和动态链接之间的区别,但答案也很好地概述了编译/链接的区别。