|
# 23-10-03总结[linux-c]
<B>S:个人感觉在Linux上面写C++/C还是很有趣的</B>
> <B>gcc编译过程:</B>
>
> .c ---> .i---> .s---> .o---> a.out
>
> -e -s -c -o
命令:gcc [file] -o [target] (如果没有target,则默认生成a.out)
> gcc参数有-g时会包含调试信息
### 静态库和动态库链接(变成库的好处:防止客户拿到核心代码)
> 静态库:可移植性强,兼容性好,但是文件体积大
>
> 静态库要求:lib开头,".a"结尾
step1:生成对应的.o文件
step2:用打包工具ar把.o文件打包为.a文件
```shell
ar rcs libxxx.a *.o #r更新 c创建 s索引
```
<font color="#1196EE">🐉 需要把头文件和.a文件一起发给客户</font>
编译命令:gcc [测试文件] -L./ -I./ -l[库] -o [target]
(-L 所连接的库在哪里 -I 表明头文件在当前目录 -l 库名,要去掉前缀和后缀)
> 动态库:依赖动态库,简化升级,依赖版本严重
>
> 动态库要求:lib开头,“.so”结尾
step1:生成目标文件,要加-fPIC
```shell
gcc -fPIC -c add.c
```
step2: 生成共享库,要加-shared
```shell
gcc -shared *.o -o libxxx.so
```
🐲 <font color="#1196EE">编译命令和静态库相同</font> (但是需要配置环境变量,有点麻烦)
### GDB调试工具
1.启动gbd:gdb [file]
2.设置参数:set args [ ] [ ] ....
3.查看参数:show args
4.执行,停在第一个断点处(如果有):run
5.向下开始执行一行:start
6.显示10行代码:list
7.设置断点
> 1.b 10:在第十行设置断点
>
> 2.b [func]在函数入口设置
>
> 3.b [file]:9 if value == 10 条件断点
8.查看断点:i b
9.删除断点:delete [op]
10.下一步:next(n)
11.继续(直到碰到另外一个断点):continue
### Makefile(主要用于维护和减少编译时间)
#### 一条规则:
> 目标:依赖文件列表
>
> <Tab> 命令列表
依赖文件:用于输入的文件
变量: a=b(放在文件最前面)
自动变量:$@:目标 $<:第一个条件 $^:所有条件
如果文件夹里面仅有.c和.o文件,下面的这个Makefile就不错
```shell
SRC=$(wildcard ./*.c)
OBJS=$(patsubst %.c,%.o,$(SRC))
target=test
$(target)(OBJS)
gcc $^ -o $@
%.o:%.c
gcc -c $< -o $@
.PHONY:clean
clean:
rm -rf $(OBJS) $(target)
```
#### ⛨命令:make
|
|