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