linux 静态库 动态库常识

转自:http://blog.csdn.net/hittata/article/details/8050748

 查看库中函数列表
静态库用ar -t  libxxx.a
动态库用 nm -D libxxx.so

静态库,最好办法是查看头文件
动态库,一般都有说明文档

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
#linux库名命名规范

静态库libXXX.a
动态库libXXX.so

引用时只需使用XXX即可引用

-lxxx 即可

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
一个静态库引用另一个静态库


1.假如有两个.a libx.a 里面需要调用liby.a的接口函数

那么,将代码编译生成libx.a的时候,不需要liby.a的,只需要y里面的头文件即可

但是,当给调用者使用libx.a的时候,必须都加上去,也就是-lx -ly, 不能够只有-lx

(而且注意顺序,-ly -lx都不行)


2.有一个办法 就是 把第二个.a文件ar -x 编程.o 文件  
然后把第一个.a文件也ar -x 编程.o文件
然后ar -c 把所有的.o文件打包起来


假设前一个是a,后一个是b,只需要在a的代码里包含b的头文件即可。
不过要注意的是,每次修改b库的代码,要重新编译b再重新编译a.

.a 文件的结构和.tar文件就没有什么区别。 x 命令解出来, a 命令添加, t命令列表

楼主的要求只需要,假设A.a, B.a C.a 在/usr/local/lib目录下
mkdir /tmp/libABC
cd /tmp/libABC
ar x /usr/local/lib/A.a
ar x /usr/local/lib/B.a
ar x /usr/local/lib/C.a
ar cru libABC.a *.o
ranlib libABC.a
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
动态库:
1.编译时,把头文件,库文件路径,库文件包括进去
2.连接时,将动态库加入到动态库搜索路径中

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
源代码安装软件,第三方开发源码库,都提供编译链接参数程序:
格式大概如下:
XXX-config
XXX_config
位置一般在程序包/bin 目录下.

比如 
1.
gtk1.2的链接参数生成程序是gtk-config,
执行gtk-config   --libs就能得到以下输出:- L/usr/lib   -L/usr/X11R6/lib   -lgtk   -lgdk   -rdynamic 

2. mysql的编译链接参数生成程序mysql_config
root@OP_39_184_sles10:/home/li/c/mysql/ver3/include# mysql_config
Usage: /usr/local/mysql/bin/mysql_config [OPTIONS]
Options:
        --cflags         [-I/usr/local/mysql/include/mysql]
        --include        [-I/usr/local/mysql/include/mysql]
        --libs           [-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm]
        --libs_r         [-L/usr/local/mysql/lib/mysql -lmysqlclient_r -lz -lpthread -lcrypt -lnsl -lm -lpthread]
        --socket         [/tmp/mysql.sock]
        --port           [3306]
        --version        [5.0.37]
        --libmysqld-libs [-L/usr/local/mysql/lib/mysql -lmysqld -lz -lpthread -lcrypt -lnsl -lm -lpthread -lrt]













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值