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
    码云链接

  • 相关阅读:
    十. 代码格式化插件 Tag
    小知识点
    IE11 打开方式 出现两个图标
    一 OS X 焦点 切换
    九. 边栏工具 浏览器工具 SideBarEnhancements
    Django进阶之缓存和信号
    Django进阶之中间件
    Python 堡垒机编程之Paramiko
    Django ORM补充
    Web 开发基础之Html
  • 原文地址:https://www.cnblogs.com/besti2015/p/7617770.html
Copyright © 2011-2022 走看看