Linux共享库和静态库(Linux下共享和静态库的使用方法)

在 Linux 系统中,库是一组预编译的函数和子程序,可供程序员在程序中使用。

库可分为两种类型:共享库(Shared Libraries)和静态库(Static Libraries)。

图片[1]-Linux共享库和静态库(Linux下共享和静态库的使用方法)-不念博客

静态库

静态库是一个包含了多个目标文件(.o 文件)的归档文件,扩展名为 .a。

当程序链接到静态库时,库中所需的目标文件会被完整地复制到目标程序中。

这样,程序在运行时不再需要库文件。

创建静态库的步骤:

a. 编译源代码文件,生成目标文件:

gcc -c source1.c source2.c

b. 使用 ar 命令创建静态库:

ar rcs libexample.a source1.o source2.o

使用静态库: 当链接程序时,只需指定静态库的路径即可。例如:

gcc main.c -L. -lexample -o main

其中,-L. 表示在当前目录中搜索库,-lexample 表示链接名为 libexample.a 的库。

共享库

共享库(又称动态库)是一种在程序运行时才加载的库,扩展名为 .so。

多个程序可以共享同一个共享库,从而减小程序的体积并节省系统资源。

创建共享库的步骤

a. 编译源代码文件,生成目标文件:

gcc -fPIC -c source1.c source2.c

这里的 -fPIC 选项表示生成位置无关代码(Position Independent Code)。

b. 使用 gcc 命令创建共享库:

gcc -shared -o libexample.so source1.o source2.o

使用共享库: 当链接程序时,只需指定共享库的路径即可。例如:

gcc main.c -L. -lexample -o main

其中,-L. 表示在当前目录中搜索库,-lexample 表示链接名为 libexample.so 的库。

为了在运行时找到共享库,你还需要设置环境变量 LD_LIBRARY_PATH,使其包含共享库所在的目录。例如:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/shared/library

或者,将共享库安装到系统默认的库目录(如 /usr/local/lib)中,并运行 ldconfig 命令更新系统库缓存。

总结

静态库和共享库在 Linux 系统中都有其用途,静态库可以使程序独立于外部库文件,但可能导致程序体积较大。

共享库在多个程序中共享,可以节省系统资源,但需要在运行时加载。

© 版权声明
THE END