zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155332第2周课堂实践

    2017-2018-1 20155332 第2周课堂实践

    第5题

    题目

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

    解法

    • [参考资料]
      英文版:http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
      不太完整的翻译:http://blog.csdn.net/benben85/article/details/4161130

    • [简介]
      共享库(Shared Library)是Linux下的通用函数库,与Windows的dll非常类似
      但是通过良好的机制,尽量避免了dll的版本升级问题(dll hell)
      一般在Linux下,共享库使用so(Shared Object)作为扩展名,后面还会跟上版本号

    • [共享库的生成和使用]
      假设有test.h test.cpp用于生成一个共享库,还有一个main.cpp来使用这个库
      ----------------------Shell------------------------
      $ gcc -c test.cpp -o test.o
      $ gcc -shared -fPIC -Wl,-soname,libtest.so.1 -o libtest.so.1.0 test.o
      $ ln -s libtest.so.1.0 libtest.so.1
      $ ln -s libtest.so.1 libtest.so
      $ gcc main.cpp -L. -ltest -o test
      $ LD_LIBRARY_PATH=$(pwd) ./test
      -------------------------------------------

    • [解决过程]

    gcc -shared -fpic -o libcal.so sub.c add.c mul.c div.c
    gcc -o math5332 main.c ./libcal.so

    --------

    myod

    题目

    • 复习c文件处理内容
      编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
      main与其他分开,制作静态库和动态库
    • 我的代码
    #include <stdio.h>
    #include <sys/types.h>
    #include <string.h>
    int main()
    {
    	FILE *fp;
    	fp=fopen ("b","r+");
    	char ch;
            char st[1000];
    	int i=1,j=1,n=0;
            while ( (ch=fgetc(fp))!=EOF){
    		//if(ch!='
    ')st[i]=ch;
    		//else st[i]='\n';
    		st[i]=ch;
    		i++;
    	}
    	n=i;
            for(i=1;i<=n;i++)
    	{
    		if(st[i]=='
    ')printf("  \n");
    		else printf("%3c",st[i]);
    		if(i%16==0){
    			printf("
    ");
    			for(;j<=i;j++)printf("%3x",st[j]);
    			printf("
    ");
    			}
    	}
            for(;j<=i-2;j++)printf("%-3x",st[j]);
            printf("
    ");
    	fclose(fp);
    	return 0;
    }
    
    • makefile文件

    myod: myod.c
    gcc -o myod myod.c
    码云链接

  • 相关阅读:
    linux下shell显示-bash-4.1#不显示路径解决方法
    update chnroute
    An error "Host key verification failed" when you connect to other computer by OSX SSH
    使用dig查询dns解析
    DNS被污染后
    TunnelBroker for EdgeRouter 后记
    mdadm详细使用手册
    关于尼康黄的原因
    Panda3d code in github
    Python实例浅谈之三Python与C/C++相互调用
  • 原文地址:https://www.cnblogs.com/besti2015/p/7617770.html
Copyright © 2011-2022 走看看