2010-08-26 28 views
2

我有一個使用Boost.Threads作爲DLL(特別是Mac OS X框架)的插件體系結構的應用程序。我正在嘗試編寫一個使用Boost.Threads的插件,並希望靜態鏈接庫。一切都很好,但應用程序在Boost.Threads代碼深處的插件中快速崩潰。鏈接到Boost.Threads的DLL版本似乎可以解決問題,但我希望我的插件是獨立的。多個Boost.Thread實例在C++應用程序中可以使用嗎?

是否有可能有這樣的設置Boost.Threads(一個DLL,一個靜態鏈接在另一個DLL)的兩個實例?如果是這樣,我會錯過什麼讓這兩個實例相處?

+0

什麼版本的boost以及你是如何構建Boost.Thread的? – 2010-08-29 02:08:42

+0

目前提升1.37。第一個是在Mac上構建的框架,第二個是作爲插件(另一個DLL /框架)的源代碼編譯的。 – fbrereto 2010-08-30 16:04:50

回答

1

一旦我的團隊面臨類似的問題。由於我目前不提及的原因,我們不得不開發一個使用2個不同版本的Boost(線程,系統,文件系統)的系統。

我們想出並執行的想法是獲取我們需要的兩個Boost版本的源代碼,然後調整其中一個來更改符號和函數名稱以避免名稱衝突。

換句話說,我們更換的名稱升壓氣泡源內(或其它名稱)的所有引用,並更改了編譯,所以它會建立的libbubbles代替libboost

這個程序給了我們2套庫,每套庫都有自己的二進制文件和頭文件。

如果你看了我們的應用程序的源代碼,你會看到類似這樣的:

#include <bubbles/thread.hpp> 
#include <boost/thread.hpp> 

bubbles::thread* thread_1; 
boost::thread* thread_2; 

我想象一些球員已經在這裏遇到了類似的情況。可能有更好的替代方案,我上面提到的那個。

相關問題