gcc常用命令介绍
GCC 全称是 GNU C Compiler,是gnu中最流行的c & c++编译器,下面我们看一下一些主要的参数使用方法。
对于一个源文件可以直接生成可执行文件
gcc test.c
默认生成a.out, -o指定生成的文件名
gcc test.c -o test
实质上,上述编译过程是分为四个阶段进行的,包括预处理(Preprocessing)、编译(Compilation)、汇编 (Assembly)和链接(Linking)。
1.编译过程
1.1预处理
gcc -E test.c -o test.i
-E指定gcc预处理结束就停下来,主要完成包含头文件、去除注释、替换宏等工作
1.2编译
gcc -S test.i -o test.s
-S将源文件编译成汇编代码
1.3汇编
gcc -c test.s -o test.o
gas汇编器负责将汇编代码编译为机器代码
1.4链接
gcc test.o –o test
2.调试
gcc -g test.c –o test
-g生产供gdb调试用的debug信息,生成的可执行文件大,执行效率低
strip可以删除其中的debug信息
strip test
3.优化编译
gcc -O test.c -o test
-O使编译器对代码进行自动优化编译,生产效率更高的可执行文件,另外
-O0 不优化
-O|-O1, 默认优化
-O2 -O3 更高级别优化
4.检错
gcc -Wall test.c –o test
-Wall,将所有的警告信息全开
5.库文件
编译动态库
gcc –shared –fPIC test.o –o libtest.so
-shared 表示生产动态链接库
-f后面跟一些编译选项,PIC表示生产位置无关代码(Position Independent Code),即可以在进程的任意内存位置执行的目标码
编译静态库
ar cr libtest.a test.o
-c表示创建一个新的库,-r表示插入文件号码到库中
链接库文件
gcc test.c -L/path/lib -lxxx -I/path/include
-I, 指定头文件所在的文件夹
-l, 指定所使用到的函数库。默认优先使用动态库libxxx.so,-static选项可以禁止使用动态库
-L,指定函数库所在的文件夹
动态库链接时搜索路径顺序:
1. 编译目标代码时-L指定的动态库搜索路径
2. 环境变量LD_LIBRARY_PATH(动态库搜索路径)
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib、/usr/lib
静态库链接时搜索路径顺序:
1. 参数-L指定路径
2. 环境变量LIBRARY_PATH(指定程序静态链接库文件搜索路径)
3. 默认目录 /lib 、/usr/lib、 /usr/local/lib
6.宏
-Dmacro
相当于#define macro
-Dmacro=defn
相当于#define macro=defn
-Umacro
相当于#undef macro
7.头文件依赖
-M,生成文件关联的信息,包含目标文件所依赖的所有头文件
-MM,同上,但忽略由#include<file>造成的依赖关系
-MD,和-M相同,但是输出将导入到.d的文件里面
-MMD,和-MM相同,但是输出将导入到.d的文件里面
gcc常用命令介绍的更多相关文章
- GCC常用命令行一览表
GCC常用命令行一览表 这些常用的 gcc/g++ 命令行参数,你都知道么?1. gcc -E source_file.c-E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_ ...
- maven常用命令介绍
mvn 3.0.4 创建maven项目命令 mvn archetype:generate -DgroupId=damocles-autocredit -DartifactId=damocles ...
- Hadoop生态圈-zookeeper本地搭建以及常用命令介绍
Hadoop生态圈-zookeeper本地搭建以及常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.下载zookeeper软件 下载地址:https://www.ap ...
- Hadoop生态圈-phoenix完全分布式部署以及常用命令介绍
Hadoop生态圈-phoenix完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. phoenix只是一个插件,我们可以用hive给hbase套上一个JDBC壳,但是你 ...
- Docker 安装与常用命令介绍
docker的镜像文件作用就是:提供container运行的文件系统层级关系(基于AUFS实现),所依赖的库文件.已经配置文件等等. 安装docker yum install -y docker 启动 ...
- 转:maven常用命令介绍
mvn 3.0.4 创建maven项目命令 mvn archetype:generate -DgroupId=damocles-autocredit -DartifactId=damocles ...
- Linux操作系统安全-OpenSSL工具常用命令介绍
Linux操作系统安全-OpenSSL工具常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.OpenSSL开源项目有三个组件 openssl: 多用途的命令行工具,包 ...
- cmd常用命令介绍
一.cdm命令介绍:CMD命令是一种命令提示符,CMD是command的缩写,即命令提示符(CMD),位于C:\Windows\System32的目录下,是在OS/2,Win为基础的操作系统(包括Wi ...
- 数字证书管理工具keytool常用命令介绍
需要给一个apk加签名,用到了keytool这个工具,下面转载一篇介绍keytool的文章 http://blog.chinaunix.net/uid-17102734-id-2830223.html ...
随机推荐
- 0c-42-ARC模式下如何兼容非ARC的类
1.ARC模式下如何兼容非ARC的类 让程序兼容ARC和非ARC部分.转变为非ARC -fno-objc-arc 2.将MRC转换为ARC ARC也需要考虑循环引用问题:一端用strong,一端用we ...
- 浏览器使用ActiveX控件
在IE中使用ActiveX控件,需要使用HTML中的标志是<OBJECT>,该标记几个重要的参数特性有:1.ID:为控件提供一个标识名称,为HTML代码提供一种访问该控件的入口.2.CLA ...
- careercup-高等难度 18.2
18.2 编写一个方法,洗一副牌.要求做到完美洗牌,换言之,这幅牌52!种排列组合出现的概率相同.假设给定一个完美的随机发生器. 解法:假定有个数组,含有n个元素,类似如下: [1][2][3][4] ...
- NHibernate讲解
第1章 NHibernate体系结构 总览 对NHibernate体系结构的非常高层的概览: 这幅图展示了NHibernate使用数据库和配置文件数据来为应用程序提供持久化服务(和持久化的对象). 我 ...
- JS获取与遍历节点的兄弟父级
发布:脚本学堂/JavaScript 编辑:JB01 2014-01-23 15:40:11 [大 中 小] 介绍下js获取节点的兄弟.父级与子元素的方法,学习下js遍历节点的操作方法,有需要 ...
- c#使用MethodInvoker解决跨线程访问控件
功能函数测试集锦(77) C#专区(114) 版权声明:本文为博主原创文章,未经博主允许不得转载. .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线 ...
- memcached缓存批量更新解决方案探讨
众所周知,Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 俺所在的公司经营的主要是基于web和wap两个平台的手机游戏门户网站,分布式缓存解决方法正好有 ...
- 代码片段------find批量处理
应用案例: 当前目录下有若干目录,有多个目录下有一个名叫build.sh的脚本,但是没有可执行权限,现在要将所有的build.sh假如可执行权限. pengdl@debian:~/work/SDK_3 ...
- star
Astronomers often examine star maps where stars are represented by points on a plane and each star h ...
- 【python,logging】python中的logging模块
本文章转自kenby的博客,比较全面易懂,转来留作以后使用. http://kenby.iteye.com/blog/1162698 一.从一个使用场景开始 import logging # 创建一个 ...