2018-2019-1 20165330 《信息安全系统设计基础》第一周学习总结

学习内容总结

gcc编译器
  1. 命令格式:gcc [格式] [文件名]
  2. 常用编译选项:
    • -E:仅执行编译预处理
    • -S:将C代码转换为汇编代码
    • -c:仅执行编译操作,不进行连接操作
    • -o:指定生成的输出文件
    • -I:指定头文件目录
    • -l:指定程序要链接的库
    • -L:指定库文件所在的目录名
  3. 编译过程:
    • 预处理: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
  4. 多模块编译:gcc *.c -o hello
静态库和动态库的生成与调用方法
  1. 静态库
    • 生成.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
  2. 动态库
    • 生成.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基本原理及语法规范
  1. 格式:vim Makefile
  2. 编译:make
  3. 运行:./文件名
  4. 注意:在vim makefile中enter回车后在新一行的开头先用Tab键
gdb调试

参考C编译: 使用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

测试中遇到的问题及解决方法

  1. 在vi测试中遇到error
    image

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

  1. 在进行gdb调试时出现
    image

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

  1. 在进行makefile时出现
    image

解决方法:原因是所在目录下没有math.o文件,在进行vi makefile时错把main.o输成了math.o

  1. 在进行共享库测试时,按照老师所发的视频我并没有成功调试出来,一直显示 不存在-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

  1. 在进行git时出现错误提示fatal: 拒绝合并无关的历史

解决办法:通过参考git配置过程中fatal:拒绝合并无关的历史,输入其中的两条命令git成功

代码托管

image

posted @ 2018-09-23 21:55  20165330张羽昕  阅读(157)  评论(0编辑  收藏  举报