linux 静态库 动态库常识
2012-10-09 08:48
309 查看
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
查看库中函数列表
静态库用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]
查看库中函数列表
静态库用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]
相关文章推荐
- linux 静态库 动态库常识
- [学习备忘录]Linux平台静态库、动态库的一些笔记
- linux产生静态库和动态库
- Linux 静态库 & 动态库
- Linux 动态库与静态库制作
- Linux命令之ar - 创建静态库.a文件和动态库.so
- Linux下gcc编译器生成和使用静态库和动态库
- Linux环境下静态库和动态库
- 关于Linux静态库和动态库的分析
- Linux下的静态库和动态库的使用和制作
- Linux下Gcc生成和使用静态库和动态库详解(转)
- linux下的静态库和动态库
- 在Linux中创建静态库和动态库
- Linux下动态库与静态库
- Linux下编译动态库,静态库,以及调用
- linux下动态库和静态库引用问题解决
- LINUX 静态库和动态库
- Linux静态库和动态库的创建与使用
- Linux下的静态库和动态库 - yg2362 - C++博客
- Linux 静态库与动态库搜索路径设置