zoukankan      html  css  js  c++  java
  • 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("
    ");
            }
    
        }
        fclose(fp);/*关闭文件*/
        printf("
    ");
        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/
    

    代码和结果

    代码链接

    参考资料

    Linux环境下c语言静态链接库和动态链接库创建和使用

    Makefile 使用

  • 相关阅读:
    LeetCode 227. Basic Calculator II
    LeetCode 224. Basic Calculator
    LeetCode 103. Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 169. Majority Element
    LeetCode 145. Binary Tree Postorder Traversal
    LeetCode 94. Binary Tree Inorder Traversal
    LeetCode 144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/besti20155228/p/7617023.html
Copyright © 2011-2022 走看看