zoukankan      html  css  js  c++  java
  • 静态库与动态库的制作

    静态库

    程序所要用到的库函数代码在链接时全部被copy到程序,如果有多个进程在内存中同时运行,并且使用了相同的库函数,那么就会有多份拷贝,这就是对空间的浪费。(静态链接库以*.a为后缀)

    建立mylib.c

    int add(int a,int b)
    {
    return a+b;
    }
    

    编译文件并输出目标文件

    gcc -c mylib.c -o mylib.o
    

    将编译出的mylib.o文件打包成静态连接库

    ar cqs libmylib.a mylib.o
    

    将libmylib.a文件复制到/usr/lib目录下

    cp libmylib.a /usr/lib
    

    调用静态库文件 main.c

    #include <stdio.h>
    int main()
    {
    printf("1+3=%d
    ",add(1,3));
    return 0;
    }

    编译运行

    gcc -static -lmylib main.c -o main
    
    ./main
    

    参数:

    "-c":编译选项,只对程序做编译,不链接。
    "-static":编译选项,静态编译程序。
    "-l":编译选项,指定被编译的程序所依赖的库文件。
    ar cqs lib(静态库名).a 被制作的库文件(*.o)。

    动态库

    1.建立boye.c
    int reduce(int a,int b)
    {
    return a-b;
    }
    
    2.编译文件并输出目标文件mylib.o
    gcc -c boye.c -o boye.o
    
    3.将boye.o 制作成动态链接库,执行命令
    gcc -shared -fPIC boye.o -o liboye.so
    
    4.将liboye.so动态链接库文件复制到/usr/lib目录下
    
    5.编译
    gcc  main.c -o main  -lboye
    

     

    总结:
    readelf -d 可执行程序:查看可执行程序使用了哪些动态链接库。
    gcc -shared -fPIC(库文件名).o -o(动态链接库文件名).so :将库文件制作成动态库。
    -fPIC:使输出的对象模块是按照可重定位地址方式生成的。
    -shared:指明产生动态链接库。

  • 相关阅读:
    2017 《Java》预备作业计科1502宋奇蕊
    在 Kubernetes 上调度 GPU 资源
    ceph
    网络设备的 38 个知识点
    CF1066 ABCD
    单调队列优化动态规划
    对拍
    【关于此博客】
    使用Morphia框架操作mongodb
    通过mybatis读取数据库数据并提供rest接口访问
  • 原文地址:https://www.cnblogs.com/boye169/p/14433302.html
Copyright © 2011-2022 走看看