2010-12-01 43 views
9

我正在使用一個封閉的源庫(由Activ財務),其中包括與他們的API提升分佈,一些升壓頭文件和boost庫文件。封閉的源庫包括助推分佈

我也在我現有的代碼庫中使用Boost,並且我需要使用現有代碼中的Activ。

幾點

  • 我可以封裝我使用ACTIV,使整個ACTIV部分達一個類我寫的不公開任何ACTIV的頭
  • 這種單一的頭文件不使用的任何提振任何
  • 這樣,我可以保證我的代碼使用ACTIV的升壓HPP文件,我的代碼的ACTIV部分使用我Boost的HPP文件

我擔心來在鏈接。我如何確保我的Activ依賴代碼鏈接到Activ的Boost,並且我的其他代碼鏈接到了我的Boost?

我現在使用g ++,在VS2008中也會這樣做。我之前在VS2008中工作過,但我不知道每件事情如何鏈接。我想嘗試確保它正確完成。

有沒有辦法做到這一點,而無需進一步封裝動態庫中的Activ部分?

編輯:

首先,我的最終產品始終是一個可執行文件。對於兩個人,我靜靜地聯繫起來提振自己。 Activ庫包括Boost對象庫的靜態和動態版本,並且我計劃靜態鏈接它。

我從來不會在使用不同boost版本的代碼之間傳遞Boost對象。

的問題是,如何鏈接一個CPP或.o文件對象一個庫文件,並確保其他.o文件鏈接到另一個文件中相同的對象?這可能嗎?

回答

3

庫是動態還是靜態鏈接到Boost?如果靜態鏈接,庫是否暴露DLL中的符號(declspec export)?

如果庫是靜態鏈接的且符號未公開,則您不會傳遞任何Boost數據結構(smart_ptr,線程等),您可能安全地使用自己的版本在DLL中增強庫。

+0

看我的編輯。基本上,這似乎我需要在連接時進行破解。我有兩個對象庫(每個版本的Boost)具有相同的符號,但這些符號的代碼不相同,我需要確保每個.o文件鏈接到正確的Boost .a文件。據我所知,鏈接只能在最後一次完成,所以我不知道該怎麼做。 (對於包含文件,問題更容易,因爲我可以在gcc中用不同的`-I`指令編譯每個cpp文件。)我是否正確地考慮這個問題? – Scott 2010-12-01 16:16:53