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 使用

  • 相关阅读:
    Java方法_数组
    Java语句
    C#死锁示例
    Sqlserver限制用户访问指定数据库
    Stream 和 byte[] 之间的转换
    ContentType
    IIS7多站点ssl配置及http自动跳转到https
    google map api key配置
    remote: Incorrect username or password ( access token ) fatal: Authentication failed for
    IIS 404设置
  • 原文地址:https://www.cnblogs.com/besti20155228/p/7617023.html
Copyright © 2011-2022 走看看