存档

文章标签 ‘so’

进程Bin1加载So1、So2,同时So2也加载So1,会有什么样的表现呢?

2010年3月14日 没有评论

我的初衷是这样的,有一个so1模块实现数据库连接池的管理,其他业务实现so2中需要用到连接池so1,又因为连接池只能有一个,所以连接池在进程Bin1中创建并管理,在so2中获取连接池,实际上就是Bin1中调用so1创建的连接池,哈哈,我的问题解决了。

我的想法是,因为在进程Bin1的一个业务中,会用到多个数据库的连接(多个不同的数据库呃),那么Bin1中创建一个session(session的代码中so1中),用当前线程id作为session的标识,在so2中的业务代码中根据线程id获取到session信息,需要获取什么类型的数据库连接由so2的具体业务确定,获取到连接之后注册到当前session,这样当业务取消或失败的时候,可以统一的abort数据库操作。

测试代码很简单,在dll1.so中是一个单例模式的类

在bin1中创建单例对象,并执行一个增加int的函数

dll2.so中只有一个函数,获取单例并返回一个int值

从结果我们可以发现,实际上dll2.so中使用的单例对象就是bin1中创建的单例对象

测试代码:下载

分类: C/C++ 标签: , ,

Linux动态库(.so)搜索路径(目录)设置方法

2010年3月2日 没有评论

在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可通过三种方法来指定:方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径;方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径;方法三:在编译目标代码时指定该程序的动态库搜索路径。
众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。

阅读全文…

分类: 开发技术 标签: ,