(五)gcc编译器 2.静态库和动态库的制作

内容摘要:
      本节主要介绍静态库和动态库的制作和使用,以及比较静态库和动态库的优缺点


一、静态库的制作与使用

      静态库在linux中是以.a结尾的文件。静态库是在编译过程中链接时生成可执行文件时使用的。静态库的命名规则为lib+(libname)+.a,例如libmytest.a

制作步骤:

功能 命令
1.生成.o文件 gcc -c hello.c -o hello.o
2.打包.o文件 ar rcs libmytest.a *.o

静态库的使用:

有俩种方法都需要掌握。

gcc 源文件 静态库 -o 输出文件名
gcc mian.c libmytest.a -o myapp
gcc 源文件 -L 库目录 -l 静态库的名字,不加lib的 -o 输出文件名
gcc mian.c -L lib -l mytest -o myapp

可以使用nm命令查看静态库中的.o文件。

nm libmytest.a

静态库的优缺点

使用静态库就是在生成可执行程序时,将静态库中的.o文件加入到可执行程序中。
优点:
运行程序时不需要再链接了,运行的快,同时也不需要在发布程序时提供对应的库。

缺点:
可执行程序比较大,每次库升级时都需要重新编译程序。

二、动态库的制作与使用

      动态库在linux中是以.so结尾的文件。动态库是在可执行文件运行时才会链接。动态库的命名规则为lib+(libname)+.so,例如libmytest.so

制作步骤:

功能 命令
1.生成与位置无关的.o文件 gcc -fPIC -c hello.c -o hello.o
2.打包.o文件 gcc -shared -o libmytest.so *.o

动态库的使用:

有俩种方法都需要掌握。

gcc 源文件 动态库 -o 输出文件名
gcc mian.c libmytest.so -o myapp
gcc 源文件 -L 库目录 -l 动态库的名字,不加lib的 -o 输出文件名
gcc mian.c -L lib -l mytest -o myapp

可以使用ldd命令查看可执行文件所依赖的共享库。

ldd myapp

动态库的优缺点

使用动态库生成的可执行文件,需要在运行时链接动态库。
优点:
可执行程序小,每次库更新不用重新编译。

缺点:
运行的慢,在发布程序时要提供对应的库。

三、指定共享库的位置

链接器找不到共享库的位置,需要配置环境变量。
有俩种方法
(1)暂时使用,一般用于测试,为LD_LIBRARY_PATH赋值为共享库的地址。

export LD_LIBRARY_PATH = ./lib

(2)用于永久设置
1.修改动态链接器的配置文件。

vi /etc/ld.so.conf

2.在ld.so.conf中加入动态库绝对地址

/home/itcast/calc/lib

3.更新ld.so.conf文件

sudo ldconfig -v

只是一些制作动态库和静态库的相关命令,用到了再看看。

猜你喜欢

转载自blog.csdn.net/qq_23844501/article/details/113844433