五.程序调试和库文件
一. 程序调试GDB
编译程序时加 -g
gcc -o main main.c -g
执行时加 gdb
gdb main
GDB常用命令:
- 显示代码
- l,显示代码。
- l n,显示第n行代码。
- l add.c:n,显示add.c的第n行。
- 加断点 b
- b n,在第n行加断电。
- b add,任何地方遇见add函数就中断。
- 删除断点 delete n,删除第n个断点。
- 查看断点信息 info break
- 继续执行 c,直到遇见下一个断点。
- 运行程序 r
- 单步执行 n
- 进入函数 s
- 跳出函数 finish
- 打印 p,p &num,打印num地址。
- 退出 q
- 跟踪子进程 set follow-fork-mode child
二. 库文件
程序会默认在lib下查找函数,其余地方需要手动设置。
可执行程序(命令) /usr/bin
头文件 /usr/include
库文件 /usr/lib
三. 静态库
在链接的时候将库的信息链接入可执行程序。
libxx.a
-
ar 生成静态库
-
c 创建库
-
r 将方法添加到库里面
-
v 显示过程
- 生成静态库
//生成静态库,foo为静态库名称
//ar crv -o libxx.a xx.o xx.o ..
ar crv -o libfoo.a add.o max.o
- -L路径
- -l库名
- 链接静态库
//使用静态库
//在链接时指定可以去foo文件寻找函数
gcc -o main main.c -L. -lfoo
四. 共享库
共享库在链接时不能直接链接入可执行程序,只是在可执行程序内进行标记,需要放到lib文件夹下才能在运行时进行查找。
ldd:查看使用了什么共享库
libxx.so
- 生成共享库
//生成共享库
//gcc -shared -fPIC -o libxx.so x.o xx.o xxx.c...
//.c 文件会编译后链接
gcc -shared -fPIC -o libfoo.so add.o max.o
- -L路径
- -l库名
- 链接共享库
//使用共享库
//在链接时指定可以去foo文件寻找函数
gcc -o main main.c -L. -lfoo
- 移动共享库至/lib
//./main会出错
//需要将libfoo.so移动到/usr/lib下再运行
//管理员权限下
mv libfoo.su /usr/lib
./main