静态库
库是一个二进制文件,包含的代码可被程序调用
包括标准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为错误文件,最后链接时会失败
本文详细介绍了静态库和共享库的概念、特点及创建过程。静态库在编译时将代码复制到可执行文件中,使得程序独立但占用更多空间;共享库则在运行时动态加载,节省磁盘空间且便于升级。创建静态库涉及`ar`命令,而共享库则需`gcc`的`-shared`选项。文章还讲解了如何链接静态库和共享库,并讨论了库的查找路径和环境变量设置。
1451

被折叠的 条评论
为什么被折叠?



