2011-08-31 34 views
1

我想動態地將一個庫加載到獨立的作用域中,以便每個實例都有自己的內存。那可能嗎?將動態庫多次加載到多個獨立的作用域中

我想不是以便攜的方式。 dlopen和POSIX/Unix/Linux上的朋友有可能嗎?或者至少我現在關心的是MacOSX,因爲我現在可能會在其他系統上需要它。


背景:我想要使用的庫並非設計爲多線程安全。但是,如果每個線程只使用一個獨立的lib實例,它應該可以正常工作。

更多背景:這是readline lib。基本上增加多線程支持意味着重寫整個事情。

+0

'readline'將會使用標準輸入,正確嗎?由於這不是線程安全的(就像支持任何類型的同時使用一樣),無論如何,您將無法使用來自多個線程的'readline'。 –

+0

@Dark Falcon:你可以指定'readline'你想讀/寫的位置。這是'rl_input' /'rl_output'(左右)。 – Albert

回答

1

這樣每個實例都有自己的內存。

取決於你的意思是「自己的記憶」。顯然,在POSIX線程中,所有內存都是共享的,因此庫的一個實例不能擁有「自己的內存」。

您可能的意思是「讓每個實例都有自己的全局變量副本」,答案是肯定的:請參閱dlmopen(3) docs。您需要將LM_ID_NEWLM傳遞給它。

要當心:這只是Linux和Solaris,GDB不知道有關加載到非默認鏈接器空間的庫,所以調試問題目前非常困難。

+0

是的,這是我搜索的。不幸的是,我正在尋找一種在MacOSX上執行此操作的方法。 – Albert