Linux gcc、gdb
gcc
动态库与静态库
Linux编译器gcc
课堂作业
1.gcc命令的常用选项:-I、-c、-o 、-D、-g、-Wall、-O
1)列出这些常用选项的作用
- -l:取消前一个参数的功能
- -c:只进行预处理、编译、汇编
- -o :-o file 指定生成的输出文件名为file
- -D:定义宏
- -g:在可执行文件中加入标准调试信息
- -Wall:生成所有级别的警告信息
- -O:-O[0-3] 编译器优化级别 数值越大级别越高,0表示不优化
2)使用这些选项编译程序,并截图
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMzg1NTEwLzE1ODUyNzcyMDc3NDEtMjg4NjBmMGUtZTA5Zi00N2E5LTkzNDEtMjhkYTVlZjhhNjQ5LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=31&margin=[object Object]&name=image.png&originHeight=62&originWidth=518&size=10288&status=done&style=none&width=259)
2.分析静态链接库与动态链接库各自的优缺点
- 静态库
- 优点:对运行环境的依赖性较小,具有较好的兼容性
- 缺点:生成的程序比较大,需要更多的系统资源,在装入内存时会消耗更多的时间库函数有
了更新,必须重新编译应用程序
- 动态库
- 优点:在需要的时候才会调入对应的资源函数简化程序的升级;有着较小的程序体积实现进程之间的资源共享(避免重复拷贝)
- 缺点:依赖动态库,不能独立运行动态库依赖版本问题严重
3.静态链接库与动态链接库的创建方法和使用方法
- 静态链接库:
- 制作:
- #gcc -C mylib.c -o mylib.o //编译目标文件
- #ar rc libtestib.a mylib.o //制作静态库
- 静态库使用:
- 库函数、头文件均在当前目录下 #gcc -0 my. _test mytest.c libtestlib.a
- 库函数、头文件假设在/opt目录 #gcc -0 mytest mytest.c -L/opt -ltestlib -I/opt
- 制作:
- 动态链接库
- 制作
- #gcc -shared mylib.c -0 libtestlib.so //使用gcc编译、制作动态链接库
- 使用1 :
- 1)库函数、头文件均在当前目录下#gcc -o my. _test mytest.c libtestlib.so
- 2)库函数、头文件假设在/opt目录 #gcc -0 mytest mytest.c -L/opt -Itestib -l/opt
- 使用2
- 1.库函数、头文件均在系统路径下
- #cp libtestlib.so /lib
- #gcc mytest.c -0 mytest -ltestlib
- #./mytest编译运行都不会出错
- 1.库函数、头文件均在系统路径下
- 制作
4.gdb调试程序截图(练习:列出程序清单、运行程序、设置断点、清楚断点、显示程序变量值、单步执行)
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMzg1NTEwLzE1ODUyNzgzMjg3NDItZDY4MDAzNTktMzE5Zi00Y2RhLTkxNDQtNmFlMDFjZDViMzcwLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=221&margin=[object Object]&name=image.png&originHeight=441&originWidth=722&size=88921&status=done&style=none&width=361)
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMzg1NTEwLzE1ODUyNzgzNjE1NjktNzAzYWFjM2QtYTczNC00NjhjLWFmZjgtMmU5OWRiZTgxZjBhLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=297&margin=[object Object]&name=image.png&originHeight=594&originWidth=801&size=116569&status=done&style=none&width=400.5)
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMzg1NTEwLzE1ODUyNzg1MDEzNTAtNDFjYmM2YmItNThlNS00MTE2LWJkOGMtZjJiNzM3MzhmOWMzLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=297&margin=[object Object]&name=image.png&originHeight=594&originWidth=801&size=131736&status=done&style=none&width=400.5)