linux编译c 优化,Linux编译选项
Linux平台都通过CC调用它们的C编译程序.除标准和CC以外,LINUX和FREEBSD还支持gcc.
基本的编译命令选项有以下几种:
1. -c (compile)
编译产生对象文件(*.obj)/目标文件,而不链接成可执行文件,当编译几个独立的模块,而待以后由链接程序把它们链接在一起时,就可以使用这个选项,如:
$cc -c hello.c ===> hello.o
$cc hello.o
上面的cc表示选用的编译器,如gcc,g++等。
2. -o 允许用户指定输出文件名,output 如
$cc hello.c -o hello.o
or
$cc hello.c -o hello
3. -g 指明编译程序在编译的输出中应产生调试信息.
这个调试信息使源代码和变量名引用在调试程序中或者当程序异常退出后在分析core文件时可被使用.
4. -D 允许从编译程序命令行定义宏符号。一共有两种情况:
一种是用-DMACRO,相当于在程序中使用#define MACRO
另一种是用-DMACRO=A,相当于程序中的#define MACRO A.如对下面这代码:
#ifdefine DEBUG
printf("debug messagen");
#endif
编译时可加上-DDEBUG参数,执行程序则打印出编译信息
5. -I 可指定查找include文件的其他位置.
例如,如果有些include文件位于比较特殊的地方,比如/usr/local/include,就可以增加此选项如下:
$cc -c -I/usr/local/include -I/opt/include hello.c 此时目录搜索会按给出的次序进行.
6. -E 这个选项是相对标准的,它允许修改命令行以使编译程序把预先处理的C文件发到标准输出,而不实际编译代码.
在查看C预处理伪指令和C宏时,这是很有用的.可能的编译输出可重新定向到一个文件,然后用编辑程序来分析:
$cc -c -E hello.c >cpp.out 此命令使include文件和程序被预先处理并重定向到文件cpp.out.
以后可以用编辑程序或者分页命令分析这个文件,并确定最终的C语言代码看起来如何.
7. -O 优化选项, 这个选项不是标准的
-O和-O1指定1级优化
-O2 指定2级优化
-O3 指定3级优化
-O0 指定不优化
$cc -c O3 -O0 hello.c 当出现多个优化时,以最后一个为准!!
8. -Wall 以最高级别使用GNU编译程序,专门用于显示警告用!!
$gcc -Wall hello.c
9. -L 指定连接库的搜索目录,-l(小写L)指定连接库的名字
$gcc main.o -L/usr/lib -lqt -o hello
上面的命令把目标文件main.o与库qt相连接,连接时会到/usr/lib查找这个库文件.也就是说-L与-l一般要成对出现.
10. -P 仅进行编译预处理
---- 在命令行中加上-P选项可以使cc仅完成对.c文件的预处理工作,而后面的编译,汇编,优化,链接则都不做。例如:
$gcc -P my.c 此时编译系统将在当前目录下生成一个名为my.i的文件。这个文件中包含有对my.c中的伪指令进行处理后的代码及my.c中
原有的代码。在某些情况下,.i文件可能对于程序排错有一定的用处。
11. -S 仅生成汇编语言代码
---- 在cc命令行中加上-S选项,可以使cc只调用预处理程序和编译程序以生成与源程序相应的汇编代码。
与每一个c源文件相应的汇编程序被放到相应的.s文件中。例如:
$ gcc -S myprog.c myfunc.c
$ ls *.s
myprog.s myfunc.s
补充:
1)把待执行的程序送入内存,称为装入程序。
2)把待执行的程序与程序库及其它已编译好的程序连接起来,所用的准备程序称为链接程序。
如果多个逻辑CPU的“physical id”和“core id”均相同,说明开启了超线程(Hyper Threading)。
linux编译c 优化,Linux编译选项相关推荐
- linux启动时间极限优化,Linux启动时间的极限优化
在上次完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要7s左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标--2s以内.况且,在实际的商用环境中,设备可靠性的要求可是"5 ...
- linux编译c 自动化,Linux江湖06:感悟GNU C以及将Vim打造成C/C++的半自动化IDE
C语言在Linux系统中的重要性自然是无与伦比.不可替代,所以我写Linux江湖系列不可能不提C语言.C语言是我的启蒙语言,感谢C语言带领我进入了程序世界.虽然现在不靠它吃饭,但是仍免不了经常和它打交 ...
- linux编译aborted,Ubuntu Linux上编译kernel出错__stack_chk_fail
Ubuntu Linux上编译kernel出错__stack_chk_fail 发布时间:2008-02-06 00:02:18来源:红联作者:SMuonon init/built-in.o: In ...
- linux编译lame,技术|Linux 有问必答:如何在Linux中修复“fatal error: lame/lame.h: No such file or dir...
提问: 我尝试着在Linux中编译视频编码器,但是编译提示出错:"fatal error: lame/lame.h: No such file or directory", 我该如 ...
- linux的php优化,linux优化转载
1. Open File Descriptors Linux在系统调用,大量的系统调用都依赖于文件描述符,而文件描述符可分配给进程的最大大小由资源限制来定义. 因此,如果文件描述符大小不够,或有不正常 ...
- linux 编译环境包,linux上war包编译环境搭建(示例代码)
一.检查linux机器上是否有自带的jdk Java -version检查下就可以,如果有与编译需要的版本不同,先卸载,再安装编译需要的版本 jdk安装与配置. (1)jdk安装 解压缩包: #tar ...
- linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...
Linux工具链for TKStudio是一款支持TKStudio IDE集成开发环境的辅助LINUX交叉编译工具链软件,交叉编译就是跨架构编译,编译出来的程序不能在本机执行(当然有例外情况).所以这 ...
- linux编译redis打包,linux下下载redis,并且编译
1:下载.解压.编译 $ wget http://download.redis.io/releases/redis-3.0.6.tar.gz $ tar xzf redis-3.0.6.tar.gz ...
- jenkins linux编译c,【Linux】【Jenkins】代码编译和执行过程中的问题汇总
1.问题1:java.io.FileNotFoundException: /root/.jenkins/workspace/Videoyi_AutoTest_Maven/config-log4j\lo ...
最新文章
- 干货 | 上手机器学习,从搞懂这十大经典算法开始
- 密码学:RSA加密算法详解
- ORA-00054 资源正忙,但指定以NOWAIT 方式获取资源,或者超时失效
- Sping+ActiveMQ整合
- MongoDB监控及报警
- 检测php常量是否存在,php判断变量常量是否存在
- 话里话外:谁才是流程的主人
- 11gR2conceptes Memory Architecture中文翻译
- CMU 15-213 Introduction to Computer Systems学习笔记(2) Bits,Bytes,Integer
- cad通过钢筋大样生成钢筋明细表插件_为什么自动生成的钢筋明细表为空 - 应用技巧 - 常青藤软件工作室...
- react app 拉起微信、支付宝支付
- 如何判断三极管的集电极,基极和发射极?
- 原生javascript实现星级评价功能
- 2022下半年软件设计师中级考试通过
- linux面试题_全网最新、最全Linux面试题(2020版)!
- 基频和倍频的概念_一倍频分析
- 微信小程序图片/视频直传阿里云服务器OSS
- css溢出隐藏 /超出隐藏(补充CSS样式穿透 scoped 问题)
- nero刻录下载_Nero的3种替代品,可用于Linux CD和DVD刻录
- CentOS Stream修改SSH端口及删除端口
热门文章
- Python切分文本(将文本文档切分为词列表)
- Halcon学习笔记:select_points_object_model_3d(3D对象模型阀值分割)
- 训练数据的分布对F-measure, recall 和 precision的影响
- Linux 输入输出重定向 2>/dev/null和>/dev/null 2>1和2>1>/dev/nul
- Linux 文件 IO
- 开发java流程步骤,优秀Java开发人员的10个步骤
- 最优化学习笔记(四)共轭梯度法
- React Native新手引导
- 清华大学 现代软件工程 - 实战经验分享
- Linux的Xshell连接Centos7能Ping通但无法连接问题[ssh(d)+firewall(d)]【转载转载转载】