zoukankan      html  css  js  c++  java
  • 20155208徐子涵 第二周课堂实践

    20155208徐子涵 第二周课堂实践

    第五题

    题目要求

    • 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
    • 提交共享库生成和调用过程截图,要全屏,包含自己的学号信息

    回答过程概括

    • 先在命令行输入gcc -shared -fpic -o math.so sub.c add.c mul.c div.c
    • 之后在输入gcc -o test5 main.c ./libcal.so
    • 最后输入 ./test5进行运行 运行结果如图:

    代码上传截图:

    码云链接

    第二项

    要求:

    1 复习c文件处理内容

    2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能

    3. main与其他分开,制作静态库和动态库

    4. 编写Makefile

    5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

    6 在博客园发表一篇博客,重点写遇到的问题和解决过程

    myod代码实现:

    head.c
    #ifndef _HEAD_H_
    #define _HEAD_H_
    void myod(FILE *file,int n1,int n2,int n3,int n4);
    #endif
    
    
    main.c
    #include <stdio.h>
    
    #include <stdlib.h>
    
    #include"head.h"
    
    
    int main(int argc,char *argv[])
    {
    
        int i;
        int n1=0,n2=0,n3=0,n4=0;
        for(i=1;i<argc-1;i++)
        {
            switch(argv[i][2])
            {
                case 'c':n1=1;break;
                case 'x':n2=1;break;
                case 'd':n3=1;break;
                case 'o':n4=1;break;
            }
        }
        FILE *file=fopen(argv[argc-1],"r");
        if(file==NULL){printf("Error!
    ");exit(0);}
        myod(file,n1,n2,n3,n4);
        return 0;
    }
    
    myod.c
    #include<stdio.h>
    void myod(FILE *file,int n1,int n2,int n3,int n4)
    {
        char ch,line[16];
        int i;
        int j=0;
        while((ch=fgetc(file))!=EOF){
            line[j%16]=ch;
    	if((j+1)%16==0){
            if(n1){for(i=0;i<16;i++)
            {
                if(line[i]=='
    ')
                {printf("%5s","\n");continue;}
    	    if(line[i]=='	')
                {printf("%5s","\t");continue;}
                putchar(line[i]);
                putchar(' ');
                putchar(' ');
                putchar(' ');
                putchar(' ');
            }
            putchar('
    ');}
            if(n2){for(i=0;i<16;i++)
            {
                if(line[i]=='
    ')
                {printf("0%-4x",'
    ');continue;}
    	    if(line[i]=='	')
                {printf("0%-4x",'	');continue;}
                printf("%-5x",line[i]);
            }
            putchar('
    ');
            }
    
            if(n3){for(i=0;i<16;i++)
            {
                if(line[i]=='
    ')
                {printf("%-5d",'
    ');continue;}
    	    if(line[i]=='	')
                {printf("%-5d",'	');continue;}
                printf("%-5d",line[i]);
            }
            putchar('
    ');
            }
            if(n4){for(i=0;i<16;i++)
            {
                if(line[i]=='
    ')
                {printf("%-5o",'
    ');continue;}
    	    if(line[i]=='	')
                {printf("%-5o",'	');continue;}
                printf("%-5o",line[i]);
            }
            putchar('
    ');
            }
            printf("下一行!
    ");
    	}
    	j++;
    
        }
    }

    使用makefile 来进行调用myod函数,并将定义的file传入

    file的定义如下:

    myfile
    main5208:myod.a main.o
    	gcc -static -o main5208 main.o ./myod.a
    myod.a : myod.o head.h
    	ar rcs myod.a myod.o
    myod.o : myod.c
    	gcc -c myod.c
    	
    myfile1
    main52080:myod.so
    	gcc -o main52080 main.c ./myod.so
    myod.so:myod.c
    	gcc -shared -fpic -o myod.so myod.c

    完成用myod XXX实现Linux下od -tx -tc XXX的功能和制作静态库和动态库。

    运行成功截图如下:

    进行实验中遇到的问题

    问题: 尝试编写makefile的时候,出现错误,无法进行make指令。

    问题解决: 经过在网上查找,发现了编写makefile时的这一条规则:

    -Makefile的规则:

    |taeget...:prerequisites...
    |    commamd
    |    ...
    |    ...

    注意上面的格式"|"表示是行首,command距离行首是一个table键。

    问题: 在进行中还遇到了一个问题,说出来可能会有一点可笑,不过还是想正视自己,因为在上传代码到码云的时候,我发现无法使用git push指令,怎么都上传不上去。

    问题解决: 我发现是我自己没有在与码云所连接的那个仓库,也就是指定的文件夹进行上传,才导致是一个空的仓库,经过移动后成功上传。

    代码上传截图:

    码云链接

  • 相关阅读:
    Android框架之高速开发框架xUtil
    树状数组 LA 4329 亚洲赛北京赛区题
    Linq To Sql 增改删
    标题栏显示进度条
    android:inputType参数类型说明
    Illegal resource reference: @*android resources are private and not always present
    android:editable is deprecated: Use an <EditText> to make it editable
    android:contentDescription的作用是什么
    Replace
    图片缓存优化
  • 原文地址:https://www.cnblogs.com/xuzihan/p/7612922.html
Copyright © 2011-2022 走看看