程序库:主要提供功能重用,使得程序模块化,加快程序的编译,方便程序进行升级。
程序库分为静态库与动态库。
静态库:在可执行程序运行前就加入到执行码中,成为可执行程序的一部分(一般以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 查看