gcc不会编译为可执行文件

时间:2018-09-24 12:09:11

标签: gcc compilation

#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,但没什么区别。

1 个答案:

答案 0 :(得分:1)

-c标志指示gcc将源文件转换为 object 文件,以便以后链接到可执行文件。

使目标文件可执行文件对尝试运行它没有任何帮助,您需要将其链接并生成一个 real 可执行文件。可能最简单的方法是从命令行中删除-c

如果您有一些更复杂的内容(例如,您希望分别编译多个源文件,然后将所有对象链接在一起),则-c标志将很有用。

但是,由于您有要制作可执行文件的一个源文件,因此只需使用:

gcc -O0 -g -o helloworld helloworld.c

就其价值而言,this answer可能会提供有关生成可执行文件的各个阶段的更多信息。它专门涵盖了静态链接和动态链接之间的区别,但答案也很好地概述了编译/链接的区别。