将动态库多次加载到多个独立的作用域中

时间:2011-08-31 14:19:54

标签: macos dll shared-libraries readline dlopen

我想多次动态地将库加载到独立的作用域中,以便每个实例都有自己的内存。这可能吗?

我猜不是以便携的方式。是否可以在POSIX / Unix / Linux上与dlopen和朋友一起使用?或者至少我现在关心MacOSX我的特定情况(我可能稍后会在其他系统上使用它)。


背景:我想要使用的lib并不是设计为多线程安全的。但是,如果每个线程只使用lib的独立实例,它应该可以正常工作。

更多背景:它是readline lib。在那里添加多线程支持基本上意味着重写整个事情。

1 个答案:

答案 0 :(得分:1)

  

以便每个实例都有自己的内存。

取决于你对“自己的记忆”的意思。显然,对于POSIX线程,所有内存都是共享的,因此库的实例不能拥有“自己的内存”。

你可能的意思是“所以每个实例都有自己的全局变量副本”,答案是肯定的:见dlmopen(3) docs。您需要将LM_ID_NEWLM传递给它。

小心:这只是Linux和Solaris,GDB对加载到非默认链接器空间的库一无所知,因此调试问题目前非常困难。