1

我想将一个库多次动态加载到独立的范围内,以便每个实例都有自己的内存。那可能吗?

我想不是以便携的方式。dlopen在 POSIX/Unix/Linux 上可以和朋友一起吗?或者至少我现在关心 MacOSX 的具体情况(因此我以后可能在其他系统上也需要它)。


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

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

4

1 回答 1

1

这样每个实例都有自己的内存。

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

您可能的意思是“使每个实例都有自己的全局变量副本”,答案是肯定的:请参阅dlmopen(3) docs。你会想要传递LM_ID_NEWLM给它。

注意:这仅适用于 Linux 和 Solaris,GDB 对加载到非默认链接器空间的库一无所知,因此目前调试问题非常困难。

于 2011-09-03T16:28:31.187 回答