DATE 8

动态库的封装:【add.c】
1、创建库函数的源文件:vim add.c 和vim sub.c
2、生成目标文件夹:gcc -c add.c -fpic
3、生成动态库:gcc add.o -o libadd.so -shared
【备注:libadd.so:lib是前缀,add是库的名字,so是后缀,代表的是动态库】
4、建立调用库函数的源文件:vim demo.c
5、编译执行:gcc demo.c ./libadd.so
     【备注:这里的动态库是在当前目录下的】


动态库和静态库的区别:
1、静态库的后缀是.a,动态库的后缀是.so.;
2、在编译链接的时候,对于静态库,链接器是把静态库里的函数拷贝到调用的地方,调用一次   拷贝一次====》对应的实验现象是:mv libadd.a ../之后,./a.out是可以执行的;而对于动态库,链接器是在调用的地方做个“标记”,调用的时候再去动态库里去进行加载!
===》对应的实验现象:mv libmat.so ../之后,./a.out是不可以执行的;
3、链接动态库的可执行文件一般比链接静态库的可执行文件要小;
4、默认的链接方式是动态链接!如果要静态连接的话,加个参数-static


gdb调试:
主要的作用是用来调试代码的错误可以做到单步调试,或者从一个断电执行到下一个断点,甚至是改变当前的程序的执行文件,按照我们设定的条件进行执行!
【countnine.c为例】
gcc -g countnine.c -o demo1; -g加入调试信息到可执行文件里面;
==》gcc countnine.c -o demo2
==》比较下demo1和demo2的大小;
==》实际开发中:debug版本和发布版本(release版本)的可执行文件!


进入到调试环境中:gdb  debug版的可执行文件


打断点:
break  程序的行号
或者
break  函数的名字
查看断点:
info break
执行:
run
单步执行:
step 【遇到函数,会进入到函数里面进行单步执行】
next 【遇到函数,不会进入到函数里面进行单步执行】
删除断点:
delete  断点编号
执行到下一个断点:
continue 【如果接下来没有断点,一直运行到程序结束】

猜你喜欢

转载自blog.csdn.net/bruce_4/article/details/80378838