linux编程学习笔记(一)静态库与动态库

本文介绍了静态库和动态库的基本概念及它们之间的区别。静态库在链接时会被复制到可执行文件中,而动态库则是在运行时加载。文章还详细解释了如何创建和使用这两种类型的库。

库分两种:

1、静态库(static library),后缀名.a,目标文件的集合。

所谓静态的意思是:应用需要将库拷贝。

所谓拷贝是这样的过程:在link时,连接器根据程序所需的函数,将之拷贝到执行文件,所以可执行文件的大小会比使用动态库大,且一旦完成连接,静态库即可删除。

生成和使用静态库的方法:

g++ -c XXX.cpp 生成 XXX.o

(动态库和静态库都是由.o文件组成)

打包生成.a

ar crv libXXX.a XXX.o

(静态库命名规范,lib开头,.a结束。编译器会在-L选项指定目录和系统设置路径下,搜索-l参数前加上前缀lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件)

使用

g++ test.cpp -static -L. -lXXX

2、动态库(Shared library),后缀名.so,ELF格式的文件

共享库:在连接时会在执行程序中留下标记,指明当程序执行时,要载入库动态。

生成和使用动态库的方法:

g++ -shared -fPCI -o libXXX.so XXX.o

使用

连接时可以用-L指定,但是执行时,必须执行下面三步中的一个:

1、把库拷贝到/usr/lib和/lib目录下。该目录是搜索静态库和动态库的缺省目录。

2、修改 LD_LIBRARY_PATH环境变量,将动态库所在路径加入。

3、 修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾,并执行ldconfig刷新。

另外:

在搜索-l指定的库时,动态库优先级高,如果要指明连接静态库,需要加如下参数告诉连接器(-Wl 表示后面的参数直接传给连接器ld进行处理

-WI,-Bstatic

同理,限定加载动态库,采用如下参数

-WI,-Bdynamic

nm命令可以查看库中涉及的所有符号

U表示使用但未定义的(涉及到别的库)

T表示库中定义的方法


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值