【Linux基础编程】gcc命令

01.目录

02.命令概述

gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。

gcc是GNU编译器套件(GNU Compiler Collection),它包括了CC++Objective-CFortranJavaAdaGo语言D语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。

03.命令格式

基本格式如下:

用法:gcc [选项] 文件...

04.常用选项

下面列举gcc命令的一些选项,可以通过help,man等命令查出来,亦或者直接输入gcc回车也可以查到。

-pass-exit-codes         在某一阶段退出时返回最高的错误码
  --help                   显示此帮助说明
  --target-help            显示目标机器特定的命令行选项
  --help={common|optimizers|params|target|warnings|[^]
  {joined|separate|undocumented}}[,...]
                           显示特定类型的命令行选项
  (使用‘-v --help’显示子进程的命令行参数)
  --version                显示编译器版本信息
  -dumpspecs               显示所有内建 spec 字符串
  -dumpversion             显示编译器的版本号
  -dumpmachine             显示编译器的目标处理器
  -print-search-dirs       显示编译器的搜索路径
  -print-libgcc-file-name  显示编译器伴随库的名称
  -print-file-name=<>    显示 <> 的完整路径
  -print-prog-name=<程序>  显示编译器组件 <程序> 的完整路径
  -print-multiarch         Display the target's normalized GNU triplet, used as
                           a component in the library path
  -print-multi-directory   显示不同版本 libgcc 的根目录
  -print-multi-lib         显示命令行选项和多个版本库搜索路径间的映射
  -print-multi-os-directory 显示操作系统库的相对路径
  -print-sysroot           显示目标库目录
  -print-sysroot-headers-suffix 显示用于寻找头文件的 sysroot 后缀
  -Wa,<选项>               将逗号分隔的 <选项> 传递给汇编器
  -Wp,<选项>               将逗号分隔的 <选项> 传递给预处理器
  -Wl,<选项>               将逗号分隔的 <选项> 传递给链接器
  -Xassembler <参数><参数> 传递给汇编器
  -Xpreprocessor <参数><参数> 传递给预处理器
  -Xlinker <参数><参数> 传递给链接器
  -save-temps              不删除中间文件
  -save-temps=<arg>        不删除中间文件
  -no-canonical-prefixes   生成其他 gcc 组件的相对路径时不生成规范化的
                           前缀
  -pipe                    使用管道代替临时文件
  -time                    为每个子进程计时
  -specs=<文件><文件> 的内容覆盖内建的 specs 文件
  -std=<标准>              指定输入源文件遵循的标准
  --sysroot=<目录><目录> 作为头文件和库文件的根目录
  -B <目录><目录> 添加到编译器的搜索路径中
  -v                       显示编译器调用的程序
  -###                     与 -v 类似,但选项被引号括住,并且不执行命令
  -E                       仅作预处理,不进行编译、汇编和链接
  -S                       编译到汇编语言,不进行汇编和链接
  -c                       编译、汇编到目标代码,不进行链接
  -o <文件>                输出到 <文件>
  -pie                     Create a position independent executable
  -shared                  Create a shared library
  -x <语言>                指定其后输入文件的语言
                           允许的语言包括:c c++ assembler none
                           ‘none’意味着恢复默认行为,即根据文件的扩展名猜测
                           源文件的语言

05.参考示例

5.1 生成默认的可执行文件
[deng@localhost bak]$ gcc test.c 
[deng@localhost bak]$

ps:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

5.2 指定输出文件
[deng@localhost bak]$ gcc test.c -o test
[deng@localhost bak]$ ls
5th  6th  7th  8th  9th  test  test.c
[deng@localhost bak]$ 

将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

5.3 仅做预处理,不进行汇编、编译、链接
[deng@localhost bak]$ gcc -E test.c -o test.i 
[deng@localhost bak]$ 

将test.c预处理输出test.i文件。

5.4 编译到汇编语言,不进行编译和链接
[deng@localhost bak]$ gcc -S test.c -o test.s
[deng@localhost bak]$ ls
5th  6th  7th  8th  9th  test  test.c  test.i  test.s
[deng@localhost bak]$ 

将预处理输出文件test.i汇编成test.s文件。

5.5 预处理、汇编、编译,到目标代码,不链接
[deng@localhost bak]$ gcc -c test.c -o test.o
[deng@localhost bak]$ ls
5th  6th  7th  8th  9th  test  test.c  test.i  test.o  test.s
[deng@localhost bak]$ 
5.6 将目标代码生成可执行文件
[deng@localhost bak]$ gcc test.o  -o test
[deng@localhost bak]$ 

将编译输出文件test.o链接成最终可执行文件test。

5.7 编译时指定优化级别
[deng@localhost bak]$ gcc -O1 test.c -o test
[deng@localhost bak]$ 

使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

5.8 多文件编译
[deng@localhost bak]$ gcc testfun.c test.c -o test
[deng@localhost bak]$ 

将testfun.c和test.c分别编译后链接成test可执行文件。

前提是main.c要include其他文件的头文件,来避免main文件中没有声明就使用没定义的函数导致的报错,如果要写的挫点,也可以不include头文件,而在main文件里手写那几个声明。

5.9 多文件编译方式2
[deng@localhost bak]$ gcc -c test.c    
[deng@localhost bak]$ gcc -c testfun.c   
[deng@localhost bak]$ gcc test.o testfun.o -o test
[deng@localhost bak]$ 

当然,使用动态库、静态库的方式也ok,动态,静态后面聊,今天只聊命令。

06.总结

相信熟悉我套路的都知道,总结总是很简洁。哈哈哈哈~~
没啥说的,东西都在上面。

建议Linux学习方法,多敲,多练。一位恩师的指点。
版权声明:转载请注明出处,谢谢!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值