作业:知道汇编文件,反汇编成c语言文件,对比汇编和C语言
进入gdb调试后,输入disas main命令反汇编c程序
#include VS #include "stdio.h"
头文件的搜索路径不同
<>只在系统指定的目录下搜索(/usr/inlcude/)
多个文件编译:gcc main.c add.c把需要的文件都带上
""先在当前找,当前找不到就在系统头文件目录中找
自己写的头文件用双引号,拉别人库或系统自带的用<>,
gcc main.c add.c -I[目录路径]大I指定第三方搜索路径
Gcc -Wall 文件名,将所有的警告都打开,不能有警告信息
-w关所有警告
栈空间是系统管理的,存储空间的分配是系统决定的
-O1 -O2 -O3编译优化
O1优化代码结构,O2优化函数调用过程对函数变量空间的释放,O3优化函数符号表的顺序
-l 链接库 -lm链接数学库,m表示函数
库文件:库用来保存函数和变量,看不到实现,但能使用它(静态库后缀.a,动态库后缀.so)
根目录下 /lib/保存系统运行需要的库,/usr/lib保存程序运行需要的库
库里面文件有前缀和后缀,libm.a是数学库,在/usr/lib目录下
静态库的加载是在编译阶段加载,动态库在执行980107阶段加载
静态库动态库制作
开发工具-gdb 调试器 (1、运行程序 2、设置断点 3、查看变量的状态)
Gcc -g demo.c -o demo
Gdb demo 回车运行
进入gdb调试界面,run命令运行程序,调试器中用list命令可以查看源码,设置断点用break+行号命令(break 10),后面还可以加条件表达式if i=10,打完断点再run,此时可以print变量(print i),此命令查看变量值,next命令单步执行,continue继续运行跳过当前断点,quit退出断点运行,查看断点信息(info break),删除断点,delete+断点编号(delete 1),break+函数名,即在函数调用时加断点。next单步执行不会进入函数,step也是单步执行,能进入子函数, 所有命令都可以用首字母代替。
语法错误,编译器检查,逻辑错误 自己调整,运行时错误,比如段错误,一般是内存错误,内存泄漏,空洞,
开发工具-make 工程管理器
作用:自动编译(按照规定的编译逻辑进行编译)(根据文件是否修改进行选择编译)
make要想工作,是按Makefile文件中内容工作,如何编写Makefile
makefile语法(三要素):目标文件 依赖文件 命令
目标:依赖
命令(按TAB)
三者关系,执行命令,最终生成目标,依靠依赖文件
从第一行执行,如果依赖的文件是另一个目标,那么跳到后面一条目标体处
Makefile中先把所有的.c转换成.o文件,再从.o文件转换到可执行文件,而不是直接转换
完成c程序编写和Makefile文件编写后,直接输入make命令,就能运行,
伪目标,隐藏命令用@,
Makefile文件名重命名,按照指定文件操作,使用make -f 文件名
Sp add.c分屏代码