gcc命令

134 次浏览次阅读
没有评论

简介:

GCC 全称:GNU Compiler Collection. 是 GNU 工具链的主要组成部分,是 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。

GCC 原名为 GNU C 语言编译器,它原本只能处理 C 语言,但现在的 GCC 不仅可以编译 C、C++ 和 Objective-C,还可以通过不同的前端模块支持各种语言,包括 Java、Fortran、Ada、Pascal、Go 和 D 语言等等。

GCC 的编译过程分为四个阶段:预处理(Pre-Processing)、编译(Compiling)、汇编(Assembling)以及链接(Linking)。

语法:

gcc [options] file...
选项:
  • 传递给预处理器(preprocessor)。
  • -Wl,:将逗号分隔的 传递给链接器(linker)。
  • -Xassembler :将 传递给汇编器(assembler)。
  • -Xpreprocessor :将 传递给预处理器(preprocessor)。
  • -Xlinker :将 传递给链接器(linker)。
  • -save-temps:不用删除中间文件。
  • -save-temps=:不用删除指定的中间文件。
  • -no-canonical-prefixes:在构建其他 gcc 组件的相对前缀时,不要规范化路径。
  • -pipe:使用管道而不是中间文件。
  • -time:为每个子流程的执行计时。
  • -specs=:使用 的内容覆盖内置规范。
  • -std=:假设输入源为
  • –sysroot=:使用 作为头文件和库的根目录。
  • -B :将 添加到编译器的搜索路径。
  • -v:显示编译器调用的程序。
  • -###:与 -v 类似,但引用的选项和命令不执行。
  • -E:仅执行预处理(不要编译、汇编或链接)。
  • -S:只编译(不汇编或链接)。
  • -c:编译和汇编,但不链接。
  • -o :指定输出文件。
  • -pie:创建一个动态链接、位置无关的可执行文件。
  • -I:指定头文件的包含路径。
  • -L:指定链接库的包含路径。
  • -shared:创建共享库 / 动态库。
  • -static:使用静态链接。
  • –help:显示帮助信息。
  • –version:显示编译器版本信息。

示例

阶段编译

假设有文件 hello.c,内容如下:

include

int main(void)
{
printf("Hello, world\n");
return 0;
}
编译 hello.c,默认输出 a.out

gcc hello.c

编译 hello.c 并指定输出文件为 hello

gcc hello.c -o hello

只执行预处理,输出 hello.i 源文件

gcc -E hello.c -o hello.i

只执行预处理和编译,输出 hello.s 汇编文件

gcc -S hello.c

也可以由 hello.i 文件生成 hello.s 汇编文件

gcc -S hello.i -o hello.s

只执行预处理、编译和汇编,输出 hello.o 目标文件

gcc -c hello.c

也可以由 hello.i 或 hello.s 生成目标文件 hello.o

gcc -c hello.i -o hello.o
gcc -c hello.s -o hello.o

由 hello.o 目标文件链接成可执行文件 hello

gcc hello.o -o hello
正文完
 0
评论(没有评论)