静态库与动态库_笔记

参考文章:

Linux编译多个不同目录下的文件以及静态库、动态库的使用

http://blog.youkuaiyun.com/luotuo44/article/details/16970841

linux 动态库 静态库原理分析

https://blog.youkuaiyun.com/li_wen01/article/details/88979118

 

文件布局如下:

1、编译静态库

在function目录下,执行命令 $g++ -c sub.cpp add.cpp 生成sub.o和add.o文件,然后打包生成静态库,即.a文件

$ar -cr libhead.a add.o sub.o
-c :  代表create,创建.a文件
-r :  代表replace

注意:

1) 命令中,.a文件要放在.o文件的前面

2) .a文件的格式: 以lib为前缀,.a为后缀,例如 libhead.a

可以使用 $ar -t libhead.a 查看libhead.a文件中包含哪些目标文件,执行结果为 add.o  sub.o

 

输入命令生成可执行文件:

$g++ main.cpp -Ifunction -Lfunction -lhead -o main

-I( 大写i ) 头文件位置

-L 静态库目录

-l( 小写L ) 静态库

 

2、动态库

$g++ -c -fPIC add.cpp sub.cpp 生成位置无关的目标文件

$g++ -shared -fPIC add.o sub.o -o libhead.so 生成.so动态库

$g++ -Ifunction -Lfunction -lhead main.cpp -o main 利用动态库生成可执行文件

 

当静态库和动态库同时存在时,系统优先使用动态库

 

ldd命令:查看可执行程序依赖哪些库

nm命令:查看库中有哪些函数

动态库的路径问题

为了让执行程序顺利的找到动态库,有三种方法: 
(1) 把库拷贝到/usr/lib和/lib目录下。 
(2) 在LD_LIBRARY_PATH环境变量中加上库所在路径。 
(3) 添加/etc/ld.so.conf.d/*.conf文件,把库所在路径加到文件末尾,并执行ldconfig刷新。 
这样,加入的目录下的所有库都可见。

4)编译指定动态库位置(注意不再使用-L和-l)

$g++ -Ifunction ./libhead.so main.cpp -o main

或者,使用选项-Wl,-rpath,XXXX.其中XXXX表示路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值