【问题标题】:compiling cpp files with g++用g++编译cpp文件
【发布时间】:2021-07-25 13:05:25
【问题描述】:

我是 Ubuntu 用户,想知道g++ file.cpp -o fileg++ -c file.cpp 之间的区别。

我知道g++ -c file.cpp 创建了一个目标文件file.o

但是g++ file.cpp -o file 呢? 我已经使用这个命令很长时间了,但不知道作为输出生成的文件(它只是“文件”)。
我必须运行./file 来执行文件

【问题讨论】:

  • 虽然可能有点让人不知所措,但the GCC manual 是找到有关其命令行选项问题答案的最佳位置。
  • -c-o 选项包含在 "Options Controlling the Kind of Output" 中。
  • “编译或组装源文件,但不链接。链接阶段根本没有完成”是什么意思。感谢@GM 的帮助
  • @Pratyparty 回复。编译和链接,你会从this post得到一些有用的信息。
  • 构建源文件的“自然”方式是生成可执行程序文件。可以选择在中间步骤停止或生成不同类型的输出。例如,您可以使用 -E 选项要求 GCC 在预处理后停止;或者使用-S 选项停止并仅生成汇编输出;或者在使用-c 选项创建目标文件后停止。

标签: c++ makefile g++


【解决方案1】:

使用-o,您可以指定输出文件名。 在你的例如g++ file.cpp -o file 表示:将file.cpp编译成file

如果没有-o,您的源代码将编译为 a.out 文件。

如果您担心 g++ 中的其他选项,您可以随时使用g++ --help,它会显示所有参数及其含义。例如-o 含义来自帮助

-o : 将输出放入

【讨论】:

  • 你的意思是 a.out 而不是 a.o?
  • @Pratyparty 是的,错误。我已经更正了。
【解决方案2】:

g++ file.cpp -o file 生成一个可执行文件(在 Linux 上通常没有扩展名)。 -o 指定输出文件名。如果你只做g++ file.cpp,文件将被命名为a.out

相当于g++ -c file.cpp后跟g++ file.o -o file,只不过@9​​87654327@没有保存在任何地方。

请注意,您也可以使用-o <filename>-c 来更改目标文件的名称,

【讨论】:

    【解决方案3】:

    -o 仅表示“输出”,并允许您选择输出文件的名称。如果需要,仍然完全允许同时指定 -c-o

    简单地说,cc 用于命名最终的、链接的可执行文件 a.out 出于历史原因,并且仍将继续这样做,而使用 -c 主要是为了在从头开始组装之前编译多个部分,从而保留原来的名称。

    这就是为什么在编译最终可执行文件时看到的-o 比其他类型的编译文件更常见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      相关资源
      最近更新 更多