標題給出了短版;其中最重要的是我有一個C++ API封裝到通過XS暴露給Perl的C &。這已經運行良好多年了,但我們現在遇到了一個用例,我們懷疑這可能是由共同庫的重複加載引起的。具有本地庫的Perl模塊:可以讓XSLoader在dlopen上使用RTLD_GLOBAL?
症狀是我們在Tibrv周圍有一個內部Perl包裝。而且,我們還有一個內部使用Tibrv的另一個C++ API的封裝。當Perl腳本使用這兩個API時,第二個掛起創建Tib傳輸。個別地,這兩個工作都來自Perl。
我懷疑,但沒有什麼可以支持它,它以某種方式與共享狀態和Perl有關,默認情況下加載庫設置爲RTLD_LOCAL
,可能會導致此問題(這是純粹的預感)。我沒有什麼可以支持的,但我知道Tib很清楚周圍環境,我認爲這可能是一種可能性。
我的問題: 是否有可能使用dlopen
標誌,如RTLD_GLOBAL
Perl的XSLoader
?即在不重建Perl/XS的情況下打開本機庫時,是否可以更改dlopen
標誌?
到目前爲止,我在網上看到的所有東西似乎表明您需要使用DynaLoader,它需要我們以適合DynaLoader使用的方式重建我們的lib(因爲我們導出C++符號的方式) (目前不是)。
我只有約10%可以肯定,這甚至會解決實際問題,但知道,如果我們可以很容易地覆蓋dlopen
標誌將允許我們可能省下幾天功夫。
謝謝,我已經把這件事傳給了我的perl傢伙,他們遇到了問題。將接受我何時可以驗證。 – 2013-04-09 16:28:21