GCC/G++编译流程与编译选项

程序的编译流程和编译选项

程序的编译流程

  1. 预处理,生成预编译文件

     gcc –E hello.c –o hello.i
    
  2. 编译,生成汇编代码

      gcc –S hello.i –o hello.s
    
  3. 汇编,生成目标文件

    gcc –c hello.s –o hello.o
    
  4. 链接,生成可执行文件

    gcc hello.o –o hello # -o指定输出文件名
    

常见编译选项


-l(这是小写的L):指定要链接的库。库文件的一般命名方式为libpthread.so, 去掉前缀lib和后缀**.so**即是我们要链接的库的名字,例如gcc hello.c -lpthread -o hello。要链接成功,前提是库文件是在默认搜索路径/usr/lib//usr/local/lib/下面。如果不在默认搜索路径下面,就需要其他参数的加持了。


-L:指定库的搜索路径。如果库文件不在默认的库目录下面,即/usr/lib//usr/local/lib/,那么就需要使用这个参数去指定链接目录。例如,有一个名叫math的库在/home/xxx/test/目录下,我们的程序编译时需要用到这个库,那么用法如下:gcc hello.c -L/home/xxx/test -lmath -o hello.exe


-I(这是大写的i): 指定头文件所在目录。如果不加这个参数,编译器将会在默认的头文件目录,即/usr/include/usr/local/include中去搜索头文件。如果制定了-I参数,例如gcc hello.c -I/home/xxx/test -o hello.exe,那么编译器将会首先在指定的目录中去搜索头文件,如果搜索不到,再去默认的路径下搜索,再搜不到则抛出编译错误。


-include: 用于指定单个头文件的路径。一般都是在源码里通过#include "xxx.h"来指定的,所以用的不多。这里提一下#include "xxx.h"#include <xxx.h>的区别。前者会优先搜索当前目录下的xxx.h文件,然后再去默认的头文件目录下搜索。后者则是直接去默认目录搜索。


-static :此选项将禁止使用动态库,所以,编译出来的可执行文件,一般都很大。不需要其他什么运行环境就可以直接运行。

-share :此选项将尽量使用动态库,所以生成文件比较小,但是需要运行该代码的机器包含有程序需要的动态链接库。


-O0,-O1,-O2,-O3:编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高。


-std=c++20:仅g++可用,用于指定C++版本信息。

-std=c99:指定c语言版本。


-Wall 显示所有警告。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Liangtao`

请作者喝杯咖啡吧~

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

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

打赏作者

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

抵扣说明:

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

余额充值