
1 理论知识
1.1 库
1.1.1 库的概念
– 库亦称共享组件或归档库
– 库实际是多个编译源代码文件的集合(编译成一个so后缀的文件)
– 库提供给共享的C函数或C++类和方法给其他应用程序使用
1.1.2 库的作用
– 便于应用程序多次使用和共享库软件组件
– 便于应用程序供应商发布API以便其他应用程序使用
– 便于创建大型组件供动态调用(库与执行文件分离)
– 便于重用,允许重复调用以减少磁盘的空间
– 便于版本管理,允许在同一个操作系统共存多个版本
– 便于专业化,利于开发人员专注于他们单个库的核心开发,简化测试和验证
1.1.3 库的类型
– Static libraries,即静态库(.a),与应用程序结合并成为程序目标代码库的一部分
– Dynamically linked shared object libraries,
即动态链接共享对象库(.so),允许程序运行时动态链接或使用动态加载器加载或链接
1.1.4 库的约定
– 通常前缀以lib开头,链接时对库的命令引用行不包括库的前缀或后缀
– 一般使用如下编译或链接命令,
gcc src-file.c -lm -lpthread gcc src-file.c -lm -pthread
注:
– 以上两行等价,新版本的命令行选项为“-pthread”,旧版本的为“-lpthread ”
– 此示例引用数学库“m”与线程库“pthread”
– 应用的位置为 /usr/lib/libm.a和/usr/lib/libpthread.a.
2 最佳实践
2.1 部署so文件
tar -xf libmysqlclient.tar.bz2 cp -a usr/lib64/mysql/libmysqlclient.so* /usr/lib64/mysql/
2.2 确认加载语句
cat /etc/ld.so.conf
可见如下加载语句,
include ld.so.conf.d/*.conf
2.3 创建加载so的配置
vim /etc/ld.so.conf.d/libmysqlclient.conf
加入so的所在目录的结对路径,
/usr/lib64/mysql
2.4 执行命令是配置生效
ldconfig
参考资料:
===================
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
没有评论