2018-2019-1 20165330 《信息安全系统设计基础》第一周学习总结
学习内容总结
gcc编译器
- 命令格式:
gcc [格式] [文件名] - 常用编译选项:
-E:仅执行编译预处理-S:将C代码转换为汇编代码-c:仅执行编译操作,不进行连接操作-o:指定生成的输出文件-I:指定头文件目录-l:指定程序要链接的库-L:指定库文件所在的目录名
- 编译过程:
- 预处理:
gcc -E hello.c -o hello.i - 汇编:
gcc -S hello.i -o hello.s - 编译:
gcc -c hello.s -o hello.o - 链接:
gcc hello.o -o hello
- 预处理:
- 多模块编译:
gcc *.c -o hello
静态库和动态库的生成与调用方法
- 静态库
- 生成
.o文件:gcc -c -I/头文件所在路径 add.c sub.c mul.c div.c - 生成静态库:
ar rcvs libmath.a add.o sub.o mul.o div.o - 生成可执行文件:
gcc main.c -o main -I/头文件所在路径 -L. -lmath
- 生成
- 动态库
- 生成
.o文件:gcc -fPIC -c -I/头文件所在路径 add.c sub.c mul.c div.c - 生成动态库:
gcc -shared -o libmath.so add.o sub.o mul.o div.o - 将文件
libmath.so复制到目录/usr/lib中 - 生成可执行文件:
gcc main.c -o main -I/头文件所在路径 -L. -lmath
- 生成
- 共享库
- 创建一个共享的目标文件:
gcc -shared -fpic -o mymath.so add.c sub.c mul.c div.c - 创建可执行目标文件:
gcc -o link main.c ./mymath.so - 运行link:
./link
- 创建一个共享的目标文件:
makefile基本原理及语法规范
- 格式:
vim Makefile - 编译:
make - 运行:
./文件名 - 注意:在
vim makefile中enter回车后在新一行的开头先用Tab键
gdb调试
- 编译:`gcc -g -I/头文件所在路径 main.c -o main
- 进入调试:
gdb main - 查看某行程序:
(gdb) list n - 查看
main.c中的内容:(gdb) list main.c:1 - 运行程序:
(gdb) run - 在某行设置断点:
(gdb) break n - 查找帮助:
(gdb) help - 退出gdb:
(gdb) quit
测试中遇到的问题及解决方法
- 在vi测试中遇到error

解决办法:发现当前已在main.c的目录下,-I空格后继续输入目录已多余,而且当前文件夹没有bin文件,所以之后我跳到总的大目录下成功
- 在进行gdb调试时出现

解决办法:原因是在源文件main.c中我并没有提前声明i<c中c的数值,导致不能读取断点设值
- 在进行makefile时出现

解决方法:原因是所在目录下没有
math.o文件,在进行vi makefile时错把main.o输成了math.o
- 在进行共享库测试时,按照老师所发的视频我并没有成功调试出来,一直显示 不存在
-lmymath目录
解决方法:一直没有搞懂怎么将文件
libmath.so复制到目录/usr/lib中,但是我在网上发现了学姐用的另一种方法进行共享库的生成与调试:首先创建一个共享的目标文件:gcc -shared -fpic -o mymath.so add.c sub.c mul.c div.c,接着创建可执行目标文件:gcc -o link main.c ./mymath.so,最后运行link:./link
- 在进行git时出现错误提示fatal: 拒绝合并无关的历史
解决办法:通过参考git配置过程中fatal:拒绝合并无关的历史,输入其中的两条命令git成功
代码托管

浙公网安备 33010602011771号