美文网首页
linux:创建共享库

linux:创建共享库

作者: fck_13 | 来源:发表于2020-05-13 23:16 被阅读0次

    先准备源码文件:
    calc.h

    #ifndef _CALC_H_
    #define _CALC_H_
    
    int add(int a, int b);
    
    int sub(int a, int b);
    
    int mul(int a, int b);
    
    int div(int a, int b);
    
    #endif
    

    calc.c

    #include "calc.h"
    
    int add(int a, int b){
        return a+b;
    }
    
    int sub(int a, int b){
        return a-b;
    }
    
    int mul(int a, int b){
        return a*b;
    }
    
    int div(int a, int b){
        return a/b;
    }
    

    main.c

    #include <stdio.h>
    #include "calc.h"
    
    int main(){
        int c = add(1,4);
        printf("%d\n", c);
        return 0;
    }
    
    1. 编译库的源文件
    gcc  -fPIC -c calc.c
    

    fPIC:产生位置无关码,允许在任何地址加载
    生成calc.o文件。

    1. 创建共享库
    gcc -shared -Wl,-soname,libcalc.so.1 -o libcalcso.1.1 calc.o
    

    -shared:生成共享库格式
    -Wl:表示后面的参数将传给link程序ld

    • real name : 实际的完整的名称
    • so name:记录主版本号
    • link name:只是一个链接,在链接的时候使用
    1. 修改配置文件中动态库的路径
      这一步主要是为了编译器能够找到so文件的位置,因为生成的so文件在当前目录下,编译器并不知道,所以,需要修改一下配置文件
    sudo vim /etc/ld.so.conf
    

    将so文件所在的目录添加到配置文件中,为了使配置文件生效,还需要执行下面的命令

    sudo ldconfig -v
    
    1. 使用动态库
    gcc main.c -o main libcalc.so.1
    

    然后执行./main,我们就看到执行的结果为5

    1. ldd 查看使用的库
      如果没有第三步,直接执行第四步的话,我们会得到如下的错误
    ./main: error while loading shared libraries: libcalc.so.1: cannot open shared object file: No such file or directory
    

    使用ldd命令来查看所缺少的库,执行ldd mian,得到

    linux-vdso.so.1 (0x00007fffcc2ef000)
    libcalc.so.1 => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fef19900000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fef19e00000)
    

    相关文章

      网友评论

          本文标题:linux:创建共享库

          本文链接:https://www.haomeiwen.com/subject/umbgnhtx.html