linux基本知识【2018.11.10】

GCC编译器
GCC又是一个交叉平台编译器

流程:
源文件(.c)–>预处理(.i)–>编译(.o)–>链接–>可执行
函数:用来封装功能
main主函数:程序的入口和出口

gcc的基本用法
gcc hello.c -o hello
文件命名要用英文开头

-Wall:打开所有警告项
-O:设置优化级别,O0表示关闭优化功能,-O默认为-O1
-g:将调试信息编译到目标文件中【插入调试信息】(gdb)

多文件编译:gcc a.c b.c -o app

-c:只编译,生成.o目标文件【自动生成】
-E:预处理
   gcc -E hello.c                         //对hello.c预处理,但不生成预处理文件
   gcc -E hello.c -o hello.i             //对hello.c预处理,生成hello.i
-s:生成汇编文件
	gcc -s hello.c -o hello.asm
-D:定义宏
	eg:-DMACRO,即定义MACRO宏,等于#define MACRO
-I:将目录加到程序文件目录中【增加一个搜索头文件的目录】
	eg    -I ./include
-L:将目录驾到库文件的目录列表中。【找对应的库】
	-L ./sqlit
-l:指定库名
	-lname  

静态库(.a)
库整合到程序中,使程序臃肿,难以升级,但是不需要寻找库文件的位置

静态库的命名:libname.a【name为库的命名】
静态库的使用:gcc -o file flie.c -L. -lname
静态库的创建:1、gcc -c 源文件.c
2、ar rcs 静态库名 目标文件1 目标文件2
rc:静态库不存在,就创建该库文件
s:更新库文件
ar -t libmyrand.a //查看库文件
ar -d libmyrand.a add.o //把add.o从库函数中删除,没有错误提示
ar -dv linmyrand.a add.o //把add.o从库文件中删除,有错误提示

动态库:1、动态共享库 2、动态链接库
动态库的命名:libname.so【name为库的命名】
动态库的创建:gcc -shared -fPIC -o 库名.so 源文件.c
动态库的使用:gcc 源文件.c ./库名.so -o 可执行文件名

gdb调试器
gcc -g test.c -o test
gdb test //进入gdb调试模式
功能:调试程序
调试命令:
list(l):查看程序,可跟行号
break(b):设置断点
b 函数名:函数入口处添加断点
b 行号:行号处添加断点
b 行号 if 条件 :当条件为真时,断点生效。eg:b 5 if i = 10 当i=10时,第五行断点
delete 断点编号:删除断点
clean 删除所有断点
clean +行号或者文件名
run(r)开始运行
next(n)单步运行(不进入调用函数)
step(s)单步运行(进入调用函数)
continue(c)继续运行程序
print(p)变量名:查看指定变量值
finish 运行程序:直到当前函数结束
watch 变量名:对指定变量进行监控
quit(q)退出gdb

工程文件管理器make
makefile【默认】,Makefile也可以。同一个目录最好只有一个。
makefile是make读入的唯一配置文件
在makefile中通常包含如下内容:
1、需要由make工具创建的目标体(target)。通常是目标文件/可执行文件。【可执行文件为终极目标。终极目标只有一个。】
2、要创建的目标体所依赖的文件【.o】。创建每个目标体时需要运行的命令(command),这一行必须以制表符(tab键)开头。
eg:

在命令台:
vim makefile   //创建makefile文件
在文件中编写:
hello: hello.o
	gcc -o hello hello.o
hello.o:hello.c
	gcc -c hello.c

在命令台:
#make
#./hello   

猜你喜欢

转载自blog.csdn.net/Rayyyyyyy/article/details/83931140
今日推荐