2015-07-03 86 views
1

我們有各種動態庫的應用程序,它們都使用Boost 1.48(靜態)。由於第三方對Boost Filesystem v2的依賴,我們無法切換到適用於該應用程序的更新Boost版本。混合增強庫版本

對於新的功能,我們爲應用程序開發了一個新的動態庫,該應用程序也應用於其他一些項目中。 我們可以使用最近的(靜態?)Boost庫來處理這個新的庫,而不會干擾已經在應用程序中使用的Boost庫嗎?

我應該避免的陷阱?

+1

如果您將不同的項目設置爲使用不同版本的boost,我看不出問題在哪裏。 – Jepessen

+1

另請參閱http://stackoverflow.com/questions/27312123/boost-libraries-built-with-relative-paths/27312154#27312154 – sehe

回答

1

Boost庫通常不支持混合不同版本的庫。這樣做是否會造成問題取決於許多因素,其中包括所涉及的庫,應用程序設計和目標平臺。問題的一個來源可能是符號重定位,這是Linux和其他類UNIX系統上鍊接過程的一部分。即使您使用Boost的靜態庫鏈接,鏈接的符號仍然可以從您的二進制文件中導出,並且在加載應用程序時可能會發生衝突。這會導致各種未定義的行爲,並且通常很難調試。

一般來說,我會極力阻止在同一個應用程序中混合不同版本的Boost(即運行時進程)。

1

如果您正在使用靜態增強庫來構建動態庫,那麼靜態增強庫不會對另一個增強靜態或動態庫產生副作用。