如何手动加载so文件?

CentOS(RHEL)

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

没有评论

发表评论

CentOS(RHEL)
如何配置系统网桥?

1 前言 一个问题,一篇文章,一出故事。 笔者手里有一个1U的8端口服务器,正好当交换机用。 2 最 …

CentOS(RHEL)
如何修复非XFS文件系统逻辑坏道?

1 前言 一个问题,一篇文章,一出故事。 笔者服务器根分区出现逻辑坏道,于是整理此文。 另外,如果你 …

CentOS(RHEL)
如何破解CentOS或RHEL 7的root密码?

1 前言 一个问题,一篇文章,一出故事。 本章将讲述如何破解系统root的密码。 2 最佳实践 2. …