#include <stdlib.h>
int main(int argc, char* argv[])
{
// printf("Hello World!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会——版本
gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0 版权所有 (C) 2017 Free Software Foundation, Inc. 这是免费软件;请参阅复制条件的来源。没有保修;甚至不是为了适销性或特定用途的适用性。
gcc -O0 -g -o helloworld -c helloworld.c
这是今天从头开始构建的全新系统。乌班图18.04。
生成一个 helloworld 文件,但如果我这样做并尝试运行它,则不可执行
$ chmod +x 你好世界
$ ./helloworld
bash: ./helloworld: 无法执行二进制文件: Exec 格式错误
不过,似乎编译我的大型项目没有任何问题。
尽管它是一个新系统,我重新安装了 gcc,但没有区别。
该-c标志指示gcc将源文件转换为目标文件,以便稍后链接到可执行文件。
使目标文件可执行对尝试运行它没有任何帮助,您需要链接它并生成真正的可执行文件。-c也许最简单的方法就是从命令行中删除。
如果您有更复杂的东西(例如您想要单独编译多个源文件,然后将所有对象链接在一起),则该-c标志将很有用。
但是,由于您有一个源文件想要从中生成可执行文件,因此只需使用:
gcc -O0 -g -o helloworld helloworld.c
Run Code Online (Sandbox Code Playgroud)
无论如何,这个答案可能提供有关生成可执行文件的各个阶段的更多信息。它专门涵盖了静态链接和动态链接之间的区别,但答案也提供了编译/链接区别的良好概述。