如何手动加载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

没有评论

发表回复

RHEL-Like
如何配置rsyncd服务?

1 前言 一个问题,一篇文章,一出故事。 由于笔者想实现文件通过rsync自动传输,但是又不想使用o …

RHEL-Like
如何用pam_google_authenticator认证模块实现SSH 2FA?

1 前言 一个问题,一篇文章,一出故事。 笔者想开启2FA以便增强SSH服务的安全性,于是便整理此文 …

RHEL-Like
如何升级RHEL clamav杀毒?

1 前言 一个问题,一篇文章,一出故事。 笔者需要卸载旧的病毒软件,然后更新rpm包的病毒软件,于是 …