说明:使用动静态库,一般直接安装即可,其他使用方法了解即可
静态库
静态库(Static Library)是一种将代码和数据打包成一个单独的文件的库文件,主要用于编译时的链接,而不是运行时。静态库通常以 .a
(在Unix和Linux系统中)或 .lib
(在Windows系统中)为后缀。
创建静态库
假设有两个源文件 foo.c
和 bar.c
,可以使用以下命令创建一个静态库,库名规则:libxxx.a:
gcc -c foo.c bar.c
ar rc libfoobar.a foo.o bar.o
使用静态库
在编译使用这个库的程序时,需要指定静态库文件:
gcc -o myprogram myprogram.c -I . -L . -lfoobar
其中
-I .
表示在当前目录中查找头文件
-L .
表示在当前目录中查找库文件,
-lfoobar
表示链接名为libfoobar.a
的静态库。
直接编译很麻烦有什么方法可以避免这么繁琐的操作吗
安装静态库
什么是安装静态库,听起来很高级。其实就是将库文件和头文件放到系统默认搜索路径下。
头文件默认搜索路径在 /usr/include
库文件默认搜索路径在 /lib64
编译时只需要指定库名字就可以
建立软连接
删除连接后,无法编译
动态库
动态库(Dynamic Library)是一种可以在运行时被程序加载和使用的库文件。与静态库不同,动态库在程序执行时才被加载到内存中,允许多个程序共享同一份库代码,从而减少内存占用和磁盘空间。
创建动态库
假设有两个源文件 dyfunc.c 和 log.c,可以使用以下命令创建一个静态库:
gcc -fPIC -c log.c dyfunc.c
gcc -shared -o libdylib.so log.o dyfunc.o
shared: 表示生成共享库格式
fPIC:产生位置无关码(position independent code)
库名规则:libxxx.so
使用动态库
和静态库一样:
gcc -o test main.c -I ./lib/include/ -L ./lib/mylib/ -ldylib
为了编译更简洁可以使用下面方法
安装动态库
头文件默认搜索路径在 /usr/include
库文件默认搜索路径在 /lib64
将静态库也一起使用:,编译测试
建立软连接
和静态库一样,就不赘述了
运行动态库
如果将默认路径下的库文件删除,文件运行时会找不到动态库文件,为什么?
编译指令只是编译器在编译阶段使用动态库,在程序运行时,系统不知道动态库在哪 。所以要让系统直到库的位置才能解决问题。
上面的两个方法安装或者建立软连接后,系统可以找到,文件可以运行。如果编译后要运行,但是已经将默认路径下的库文件删除,可以使用以下方法
更改环境变量 LD_LIBRARY_PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PAHT:xxx(库路径)
ldconfig 配置/etc/ld.so.conf.d/,ldconfig更新
在/etc/ld.so.conf.d目录下创建一个文件,文件写入库所在目录。
最后,ldconfig 更新设置即可
总结
说了这么多方法,其实实际应用都是直接安装库,将库放到共享库目录下。其他方法了解即可