=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
查看库中函数列表
静态库用ar -t libxxx.a
动态库用 nm -D libxxx.so
静态库,最好办法是查看头文件
动态库,一般都有说明文档
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
#linux库名命名规范
静态库libXXX.a
动态库libXXX.so
一个静态库引用另一个静态库
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]