linux静态库和共享库的创建,链接,执行

本文详细介绍了静态库和共享库的概念、特点及创建过程。静态库在编译时将代码复制到可执行文件中,使得程序独立但占用更多空间;共享库则在运行时动态加载,节省磁盘空间且便于升级。创建静态库涉及`ar`命令,而共享库则需`gcc`的`-shared`选项。文章还讲解了如何链接静态库和共享库,并讨论了库的查找路径和环境变量设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态库

库是一个二进制文件,包含的代码可被程序调用

包括标准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为错误文件,最后链接时会失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值