静态库
库是一个二进制文件,包含的代码可被程序调用
包括标准c库,数学库,线程库。。。
库有源码,可下载后编译,或直接安装二进制包
系统默认库的路径 /lib 和 /usr/lib
特点
编译时把静态库相关的代码复制到可执行文件
优点:程序包含无需静态库,运行速度更快
占用更多磁盘空间,升级之后需要更新静态库
静态库创建
确定库中函数功能、接口
编写源码hello.c
gcc -c hello.c -Wall
编译生成二进制的库文件
创建静态库hello
ar crs libhello.a hello.o
链接静态库
编写应用程序test.c
编译并链接静态库
gcc -o test test.c -L. -lhello
-L.是代表指定路径
-l 指定库名
共享库(linux常用库)
编译时记录用到哪个共享库中的哪个符号,不复制共享库中的相关代码
特点:程序尺寸小,升级方便,加载库,可共享
共享库创建
确定函数功能、接口 编写库源码bye.c 编译生成目标文件
gcc -c -fPIC hello.c bye.c -Wall
fPIC生成和位置无关的代码
创建共享库common
gcc -shared -o libcommon.so.1 hello.o bye.o
为共享库文件创建链接文件
ln -s libcommon.so.1 libcommon.so
链接共享库
编写test.c
gcc -o test test.c -L. -lcommon
执行 ./test
添加当前路径为共享库的加载路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
如何找到共享库
》》库拷贝到系统库目录(系统库目录一般放系统库,不建议)
》》环境变量中添加库所在路径
》》在搜索路径中添加存放共享库的路径
sudo vi /etc/ld.so.conf.d/*conf
(添加路径到库的配置文件中,也就是搜索路径中)
sudo idconfig(提取库的信息)
总结
写函数时候{}加函数内容即可
大写的l容易看成i
.c错误后生成的.o为错误文件,最后链接时会失败