找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 72|回复: 1

c链接库/GDB调试工具/makefile

[复制链接]

2

主题

0

回帖

8

积分

新手上路

积分
8
发表于 2023-10-3 03:51:55 | 显示全部楼层 |阅读模式
# 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

61

主题

19

回帖

529

积分

管理员

积分
529
发表于 2023-10-5 09:21:58 | 显示全部楼层
科班出身啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|云端客栈

GMT+8, 2024-5-17 09:48 , Processed in 0.209093 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 askya.cn.

快速回复 返回顶部 返回列表