如何手动加载so文件?

RHEL-Like

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

没有评论

发表评论

FTP
如何安装配置tftp服务?

1 前言 一个问题,一篇文章,一出故事。 笔者公司需要一个tfpt服务用于传输日志文件,于是整理此文 …

RHEL-Like
如何监视磁盘使用IO状态?

1 前言 一个问题,一篇文章,一出故事。 笔者最近需要查看磁盘的IO压力,于是整理此文。 2 最佳实 …

RHEL-Like
如何实现audit日志轮替?

1 前言 一个问题,一篇文章,一出故事。 笔者之前定义过日志的轮替,详细请参阅如下文档, 如何部署日 …