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的作用
在编译的时候禁止使用动态库优先使用静态库
- Linux开发工具学习笔记1
- Linux开发工具学习笔记2
- Linux 常用开发工具笔记1
- 《Linux程序设计》学习笔记09——开发工具
- Linux开发工具学习笔记3(未完)
- 开发工具-Github学习笔记
- Linux开发学习笔记
- Linux 内核入门学习笔记(二) Linux开发工具链简介
- Linux驱动开发学习笔记1
- Windows驱动开发工具 WDK 学习笔记(1)
- Windows驱动开发工具 WDK 学习笔记(1)
- awk 好用的数据处理工具,linux学习笔记1
- Opengl GLUT工具开发 学习笔记 001
- Opengl SDL工具开发 学习笔记 002
- Windows驱动开发工具 WDK 学习笔记
- 学习笔记(开发工具)-webstorm
- Linux应用程序开发学习笔记
- Linux驱动开发学习笔记
- T-SQL 利用SQL语句动态生成 解构并插入表格内容 示例
- TCP/IP协议学习(5)-UDP协议
- IGRIMACE一键新机 NZT7 NZT8 NZT9 在线源安装方式
- C#操作xml SelectNodes,SelectSingleNode总是返回NULL原因和解决方案
- java nosuchfilederror 或者nosuchmethederror
- Linux开发工具学习笔记1
- scala编程实例
- Linux路由器开发详解
- 初学者之CSS学习(五)控制文字的css样式
- tomcat4源码-深入理解tomcat
- Android事件分发机制完全解析(下)
- Android BlueDroid(三):BlueDroid蓝牙开启过程enable
- windows下MySql5.7.16数据库安装、搭配VS2013使用
- C++ primer 第七章笔记