Linux开发工具学习笔记1

来源:互联网 发布:ubuntu gnome英伟达 编辑:程序博客网 时间:2024/05/17 20:01

 Linux开发工具

1.Linux编译器-gcc

2.Linux调试器-gdb

3.Linux工程管理器-make

4.Linux脚本语言 -shell

gcc

1.gcc 能编译多种语言例如:c,c++, Object c,Java,Ada等 属于交叉平台编译器(交叉编译:简单地说,就是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行)

编译器处理过程: 预处理 编译 汇编 链接

预处理:头文件展开 宏替换 条件编译       gcc -E 只进行预处理    

             < >只在系统路线下找,“  ”先在当前路径下找,找不到才到系统路径找

编译:XXX.o  目标文件                           gcc -c XXX.c 生成XXX.o

             作用:语法检查 词法分析

汇编:XXX.s 汇编文件

             作用:生成相应的汇编指令  (不同的CPU有自己的汇编指令)

链接:建立符号表,最终生成可执行文件

gcc XXX.c -o XXX 给可执行文件重新命名

gcc三级优化

 -o1是最基本的优化,主要对代码的分支,表达式,常量来进行优化,编译器会在较短的时间下将代码变得更加短小,这样体积就会变得更小,会减少内存的占用率,在操作系统进行内存调度时就会更快。但是事情没有绝对的优点,当一个庞大的程序被拆碎细分的话,内存占用会大大增加,由于当今系统大多数都是多线程,就会出现卡顿和反应延迟。

-o2这个优化级别是o1的进阶,在上一级的基础上会进行更严格的细分,最重要的是加入了寄存器的使用。寄存器是cpu中重要的组成部分,此外还有运算器和控制器,计算机顾名思义,要进行各种庞杂的计算,由于cpu速度较快,所以计算的中间结果都会保存在寄存器中,这样可以大大提高系统的效率,但是寄存器造价高昂,数量有限,所以一般来说程序不会放在寄存器中,另一种将代码放在寄存器的方式是使用register修饰变量,适用于频繁调用的变量。

-o3这个优化属于非常强大的优化,因为编译器会进行预测,对循环每一层的预测,以便于将循环拆分,可以提高执行效率。编译器还会试图用已有的值来代替未知的值,并且还会用加代替乘,因为运算器的特性,乘法十分复杂耗时。当然o3的缺点最明显,那就是o3因为试图预测程序的走向,可能会出现误差,导致错误和程序不可逆转的走向。所以一般o3不建议使用。


#gcc -w  编译关警告(不推荐)

#gcc -Wall 打开所有警告


静态库与动态库的建立及使用:

库文件:库文件用来保存变量和函数,但是是一个类似黑箱的结构,只能使用而看不到实现的过程  库存放在 /lib  以及/usr/lib 这两个目录下

静态库 .a    动态库.so 

特点:静态库在编译时已把库文件载入程序,因此程序执行速度快,编译过程较慢,可执行文件较大,加载内存消耗较大,不容易升级,但程序容易布置。

          动态库相反

静态库的制作:

#gcc -c XXX.c  生成目标文件 XXX.o

        #ar rcs lib+库名+.a  XXX.o

      #gcc XXX.c -l+库名

#gcc XXX.c -l+库名 -L /库的路径

#touch read me     要建立一个供人使用的手册


动态库的制作:

#gcc -shared -fPIC -o lib+库名+.so XXX.c

#gcc XXX.c /库路径/ lib+库名+.so -o 程序名


-static的作用

在编译的时候禁止使用动态库优先使用静态库

















0 0