linux学习之二十六---动态链接库

1.Linux库的概念

库是一种软件组建技术,库里面封装了数据和函数,提供给用户程序调用。库的使用可以使程序模块化,提高程序的编译速度,实现代码重用,使程序易于升级。

Windows系统本身提供并使用了大量的库,包括 静态链接库(.lib文件)和动态链接库(.dll文件)。类似的,Linux操作系统也使用库。Linux系统中,通常把库文件存放在/usr/lib或/lib目录下。Linux库文件名由前缀lib、库名以及后缀3部分组成,其中 动态库以.so作为后缀,而静态库通常以.a作为后缀

在程序中使用静态库和动态库时,它们的载入顺序不一样的。静态库的代码在编译时就拷贝到应用程序中,因此当多个应用程序同时引用一个静态库函数时,内存中将会调用函数的多个副本。这样的优点是节省编译时间。而动态库是在程序开始后调用库函数时才被载入,被调用函数在内存中只有一个副本,并且动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。

2.动态链接库

在Linux环境下,可以很方便地创建和使用动态链接库。只要在编译函数库原程序时加上-shared选项即可。这样所生成的可执行程序就为动态链接库。从某种意义上来说,动态链接库也是一种可执行程序。按一般的规则,动态链接库以.so后缀。

3.代码实例

mylib.h

//mylib.h

#ifndef _MYLIB_H_
#define _MYLIB_H_

void welcome();
void outstring(const char *str);

#endif 

mylib.c

//mylib.c
#include"mylib.h"
#include<stdio.h>

void welcome()
{
      printf("Welcome to libmylib\n");
}

void outstring(const char * str)
{
       if(str!=NULL)
         printf("%s",str);
}

test.c

#include<stdio.h>

int main()
{
    welcome();
    outstring("It's successful!\n");
    return 0;
}

4.编译过程

(1)创建动态链接库

gcc -fPIC -o mylib.o -c mylib.c

gcc -shared -o libttt.so mylib.c

gcc -fPIC -shared -o libttt.so mylib.c

(2)使用动态链接库

gcc test.c -o test ./libttt.so

或者

sudo cp libttt.so /usr/lib/libttt.so

gcc test.c -o test /usr/lib/libttt.so


注意:

引用动态链接库时,必须含有路径。如果只是使用libttt.so,只需要确定这个所在目录包含进来即可。

(3)运行结果

linux学习之二十六---动态链接库_第1张图片

你可能感兴趣的:(linux,动态链接库,.so)