linux系统下动态库的创建

需求:以创建一个加减法功能的动态库为例。

1、分别创建一个加减法的库函数(add.c,sub.c)

int add(int a,int b)

{

    return a + b;

}

int sub(int a,int b)

{

    return a - b;

}

2、将库函数文件生成目标文件;

gcc -c sub.c add.c -fpic;==》》add.o,sub.o;

3、将目标文件分装成库;

gcc add.o sub.o -o libmath.so -shared;==》》libmath.so;

4、创建调用函数的源文件;(cal.c)

#include 

int main()

{

    int a;

    int b;

    printf("please input a and b:\n");

    scanf("%d,%d\n",&a,&b);

    printf("add(a,b) = %d\n",add(a,b));

    printf("sub(a,b) = %d\n",sub(a,b));

    return 0;

}

5、编译执行;

gcc cal.c ./libmath.so;==》》./a.out;

==》》

linux系统下动态库的创建_第1张图片

静态库与动态库的区别:

1、静态库的后缀是.a;冬天库的后缀是.so;

2、在编译链接的时候,对于静态库,链接器是把静态库里的函数拷贝到调用的地方,调用一次拷贝一次;对应的实验现象:

mv libadd.a ../之后,./a,out是可以执行的;对于动态库,链接器是在调用的地方做个标记,调用的时候再去动态库里加载,对应的实验现象:mv libmath.so ../之后,./a.out是不可以执行的;

3、链接动态库的可执行文件一般比链接静态库的可执行文件要小;

4、默认的链接方式是动态链接,如果要静态链接的话,加个参数-static.

你可能感兴趣的:(linux系统下动态库的创建)