静态库与动态库

tech2022-08-11  130

程序库:主要提供功能重用,使得程序模块化,加快程序的编译,方便程序进行升级。

程序库分为静态库与动态库。

静态库:在可执行程序运行前就加入到执行码中,成为可执行程序的一部分(一般以lib*.a 作为库名后缀)。

a. 应用场景:对空间要求较低,对时间要求较高程序中。 

b. 制作:

    1.使用gcc -c 生成.o 文件

    2.使用 ar 工具制作静态库, 如:ar rcs libexapmple.a a.o b.o

c. 使用(编译静态库到可执行文件中):

    gcc hello.c libexample.a -o hello

 

动态库:在程序启动时,动态加载到可执行程序中,可以被多个执行程序共享使用(一般以lib*.so 命名)。

a. 应用场景:对空间要求较高,对时间要求较低。

b. 制作:

    1.使用gcc -c 生成.o 文件 (生成与位置无关代码), gcc 增加 -fPIC参数

    2.使用gcc -shared -o libdynamic.a a.o b.o

c.使用编译时指定动态库路径(l 指定库名, L指定库路径)

    gcc hello.c -o hello -ldynamic -L .

d. 使用库(建议使用【4】配置方法)

【1】通过环境变量:export LD_LIBRARY_PATH = 库路径 (当前会话生效)

【2】永久生效:将 【1】中命令写入.bashrc 文件中,source .bashrc 或重新进入终端

【3】拷贝库到/lib(标准库目录)

【4】配置文件法

     1)sudo vi /etc/ld.so.conf

     2) 写入动态库绝对路径,保存

     3)sudo ldconfig 使配置文件生效。

   查看可执行文件动态库依赖:ldd a.cout 查看

 

 

 

 

 

最新回复(0)