2017-2018-1 20155228 《信息安全系统设计基础》第二周课堂测试与课后作业
2017-2018-1 20155228 《信息安全系统设计基础》第二周课堂测试与课后作业
题目和要求
Makefile
- 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
- 提交Make过程截图,要全屏,包含自己的学号信息
静态库的测试
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
- 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
共享库
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
myod
- 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
分析和设计
Makefile
- 在命令行中输入以下命令,用vim创建一个名为makefile的文本
vim Makefile
- 在makefile文本中写下如下代码,保存文本并退出
testmymath/*待生成的文件名*/: 20155228add.c 20155228sub.c 20155228mul.c 20155228div.c head.h/*需处理的文件名*/
/*这里是TAB不是空格*/gcc *.c head.h -o testmymath/*需执行的命令*/
- 在命令行中输入以下命令,得到testmymath
make
静态库的测试
- 在命令行中输入以下命令,将.c文件处理为.o文件
gcc -c 20152228add.c/*待处理的文件名*/ -o add.o/*处理好的文件名*/
gcc -c 20152228sub.c/*待处理的文件名*/ -o sub.o/*处理好的文件名*/
gcc -c 20152228mul.c/*待处理的文件名*/ -o mul.o/*处理好的文件名*/
gcc -c 20152228div.c/*待处理的文件名*/ -o div.o/*处理好的文件名*/
- 在命令行中输入以下命令,生成静态库
ar -cr libmymath.a/*生成的静态库文件名*/ add.o sub.o mul.o div.o/*生成静态库文件所需文件*/
- 在命令行中输入以下命令,实现20155228main.c对libmymath.a的使用,生成名为main的文件
gcc 20155228main.c head.h libmymath.a -o main
共享库
- 在命令行中输入以下命令,得到名为mymath.so的动态库文件
gcc -shared -fpic -o mymath.so/*生成的动态库文件名*/ 20155228add.c 20155228sub.c 20155228mul.c 20155228div.c/*生成动态库文件所需文件*/
- 在命令行中输入以下命令,实现20155228main.c对mymath.so的使用,生成名为mymath的文件
gcc 20155228main.c head.h mymath.so -o mymath
- 在命令行中输入以下命令,把mymath.so移动到/usr/lib/目录中
sudo mv mymath.so /usr/lib/
myod
- 在命令行中输入以下命令,用vim创建一个名为MyOd的文本
vim MyOd
- 在MyOd中写下以下代码
#include <stdio.h>
#include <stdlib.h>
main ()
{
FILE *fp;//定义指向文件的指针
char ch;
int i,count;
if((fp=fopen/*打开文件*/("/home/besti20155228/20155228代码备份/0930MyOd/hello.c"/*待读文件路径*/,"rb"))==NULL)//如果文件打开失败
{
printf("文件打开失败!");
exit(0);
}
count=0;
while((ch=fgetc(fp))!=EOF)//如果待读文件中还能读到字符
{
if(isprint(ch)//如果字符可以打印)
{
count++;
printf("%4c %4x ",ch,ch);//打印字符和字符的ascii码
if(count%8==0)
printf("\n");
}
}
fclose(fp);/*关闭文件*/
printf("\n");
return 0;
}
- 编译运行程序即可
问题和解决
问题
在利用动态库生成mymath后,输入命令运行mymath报错
./mymath
错误信息:
./main: error while loading shared libraries:mymath.so: cannot open shared object file: No such file or directory
解决
将文件myhello.so复制到目录/usr/lib中:
sudo mv mymath.so /usr/lib/