我想将一个库多次动态加载到独立的范围内,以便每个实例都有自己的内存。那可能吗?
我想不是以便携的方式。dlopen
在 POSIX/Unix/Linux 上可以和朋友一起吗?或者至少我现在关心 MacOSX 的具体情况(因此我以后可能在其他系统上也需要它)。
背景:我想使用的库不是为多线程安全而设计的。但是,如果每个线程只使用一个独立的 lib 实例,它应该可以正常工作。
更多背景:它是readline
lib。在那里添加多线程支持基本上意味着重写整个事情。
我想将一个库多次动态加载到独立的范围内,以便每个实例都有自己的内存。那可能吗?
我想不是以便携的方式。dlopen
在 POSIX/Unix/Linux 上可以和朋友一起吗?或者至少我现在关心 MacOSX 的具体情况(因此我以后可能在其他系统上也需要它)。
背景:我想使用的库不是为多线程安全而设计的。但是,如果每个线程只使用一个独立的 lib 实例,它应该可以正常工作。
更多背景:它是readline
lib。在那里添加多线程支持基本上意味着重写整个事情。
这样每个实例都有自己的内存。
取决于你所说的“它自己的记忆”是什么意思。显然,使用 POSIX 线程,所有内存都是共享的,因此库的实例不能拥有“自己的内存”。
您可能的意思是“使每个实例都有自己的全局变量副本”,答案是肯定的:请参阅dlmopen(3) docs。你会想要传递LM_ID_NEWLM
给它。
注意:这仅适用于 Linux 和 Solaris,GDB 对加载到非默认链接器空间的库一无所知,因此目前调试问题非常困难。