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)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值