博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gcc 常用选项详解
阅读量:4096 次
发布时间:2019-05-25

本文共 1578 字,大约阅读时间需要 5 分钟。

gcc编译C程序的四个步骤。
1,预处理
2,编译
3,汇编
4,链接

-Idir

添加dir目录作为头文件搜索路径,这个 dir 目录比系统头文件目录被搜索的早,所以可以通过它用自己的头文件代替系统头文件。如果有多个 -I 选项,按从左到右的顺序搜索,系统默认目录在这之后。如果该选项的dir是系统默认目录,则忽略该选项,且不改变搜索顺序。

-iquotedir

添加dir目录作为头文件搜索路径,只对引号情况有效:#include "file";

不作为尖括号的情况:#include <file> 两者都搜索用 -I

-Ldir

添加dir目录到用于搜索 -l 选项的目录列表。

--sysrootdir

dir 作为头文件和库的根目录,例如,如果编译器正常情况下在/usr/include 找头文件,在 /usr/lib 中找库文件,在这之后,更改为dir/usr/include and dir/usr/lib.

gcc 链接选项(Options for Linking)

-llibrary-l librarySearch the library named library when linking.

链接时候搜索名为 library 的库,-l 和库的名字之间可以有空格也可以没有,例如 -lname 意思是寻找名为name的库,在标准库中库的名字一般为:

lib name.a , 搜索路径包括系统默认l目录(/lib and /usr/lib),和用 -L 参数指定的目录。在没有使用-static 选项时,发现共享库name.so , 则使用name.so 进行动态链接。(共享库后缀.so 静态库.a)

-static

禁止与共享库链接

-shared

尽量与共享库链接,这是默认选项。

-c   Compile or assemble the source files, but do not link.

只对源文件进行编译,不链接生成可执行文件。只需要产生目标文件时候使用该选项。

-S    Stop after the stage of compilation proper; do not assemble.

只对源码文件编译,不装配不链接。输出为装配码文件

-E      Stop after the preprocessing stage; do not run the compiler proper.

只进行预预处理,输出为与编译源码文件。

调试选项(Debugging Your Program)

-g

生成供 gdb 使用的调试信息。

-ggdb

产生更多的调试信息。

-O[0,1,2,3]

优化程序,默认2级优化,0 不优化,优化和调试不兼容,所以不要同时使用-g 和-O 选项。

-o filename (小写) 指定输出文件名,默认 a.out

一、头文件的来源

gcc 在编译时如何去寻找所需要的头文件:

※所以header file的搜寻会从-I开始
※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
※再找内定目录
/usr/include
/usr/local/include(centos7中该目录下是空的)
gcc的一系列自带目录
/usr/include/c++/4.8.5

二、库文件的来源

编译的时候:

※gcc会去找-L
※再找gcc的环境变量LIBRARY_PATH
※再找内定目录
/lib和/lib64
/usr/lib 和/usr/lib64
/usr/local/lib和/usr/local/lib64

转载地址:http://meqii.baihongyu.com/

你可能感兴趣的文章
JavaScript:时间日期格式验证大全
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Java并发编程1-线程池
查看>>
CentOS7,玩转samba服务,基于身份验证的共享
查看>>
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
mySQL--深入理解事务隔离级别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>
线性数据结构学习笔记
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>