课堂笔记及学习笔记
测试练习
测试一
- 用Vi输入图中代码,并用gcc编译
- 通过在src目录下输入命令行
gcc -I/头文件所在路径 *.c -o ../bin main
完成编译。
- 通过在src目录下输入命令行
- 在Vi中使用K查找printf的帮助文档
- 在文件夹中的终端输入
vim main.c
,再次敲击回车进入该函数的编辑界面。 - 将光标移动到printf语句上,然后输入大写K显示帮助文档。
- 在文件夹中的终端输入
测试二
- 用gcc进行预处理,编译,汇编,链接vi输入的代码
- 预处理:
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
- 预处理:
测试三
- 1.用gcc -g编译vi输入的代码
2.在main函数中设置一个行断点
3.在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点- 打开终端输入
gcc -g *.c -o test
生成一个可执行gdb文件test - 输入
gdb test
进入gdb调试模式,再输入l
显示test文件内容。 - 在test中写入一个
for(i=0;i<5322;i++)
的空循环用来检测断点。 - 在gdb调试窗口输入
b main
在主函数第一行设置一个断点 - 输入
b 6 if i==2661
即在第2661次循环处设置另一个断点。 - 输入
info break
显示断点信息 - 输入
r
运行程序,遇到断点会显示断点内容,因为该循环设置为空,所以循环处断点没有内容显示。
- 打开终端输入
测试四
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?提交静态库生成和调用过程截图(一定包含条件断点的)
- 输入
gcc -c -I/头文件所在路径 add.c sub.c mul.c div.c
生成.o文件 - 输入
ar rcvs libmymath.a add.o sub.o mul.o div.o
生成静态库 - 输入
gcc main.c -o main -I/头文件所在路径 -L.-lmymath
生成可执行文件main
- 输入
测试五
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 输入
gcc -fPIC -I/头文件所在路径 add.c sub.c mul.c div.c
生成.o文件 - 输入
ar shared libmymath.so add.o sub.o mul.o div.o
生成静态库 - 输入
gcc main.c -o main -I/头文件所在路径 -L.-lmymath
生成可执行文件main
- 输入
测试六
- 写出编译上面vi编辑代码的makefile(注意gcc前用tab键填充),编译出来的目标文件为testmymath, 只用显式规则就可以
- 新建文件makefile,编辑代码
testmymath:main.o add.o sub.o mul.o div.o
gcc main.o add.o sub.o mul.o div.o -o testmymath
main.o:main.c head.h
gcc -c main.c
add.o:add.c head.h
gcc -c add.c
sub.o:sub.c head.h
gcc -c sub.c
mul.o:mul.c head.h
gcc -c mul.c
div.o:div.c head.h
gcc -c div.c
- 在命令行输入
make
生成目标文件testmymath
学习中问题及解决
-
问题1:
-
解决方法:在main.c中加入头文件引用
#include'head.h'
-
问题2:
-
解决方法:将makefile放入src文件夹中,并在src路径中输入make