2017-03-23 58 views
0

如果應用程序與某些庫的boost以及另一個使用boost編譯鏈接的庫鏈接,是否可能存在類似ODR的問題?增強庫的多重鏈接

例子: foo.exeboost-*.libbar.lib鏈接,以前編譯bar.lib當它是鏈接與boost-*.lib了。

庫按照MSVC構建爲多線程。

+0

你是指什麼類型的圖書館?靜態還是動態(DLL)?靜態庫沒有鏈接概念。 – SergV

+0

我問靜態庫 –

回答

0

我有一個類似的問題與libcURL和OpenSSL與靜態鏈接。 libCURL庫使用OpenSSL進行https下載,並且在編譯時需要鏈接到OpenSSL。我的觀察是:

  • 如果您鏈接的libcurl OpenSSL的,那麼如果您鏈接的libcurl到OpenSSL和你的程序鏈接到你不需要你的程序鏈接到的OpenSSL時,它使用的libcurl
  • OpenSSL,MSVC會抱怨存在多個衝突的實現。

我推薦的是你試圖鏈接到bar.lib沒有這個boost庫,看看它是否工作。如果它編譯,沒有它,你就很好。如果你得到一個未定義的引用錯誤,那麼你需要鏈接到它。這是最糟糕的情況。

0

在同一個進程中混合Boost的多個版本(包括只有頭文件的庫)總是一個壞主意。 Boost不提供API和ABI保證,如果兩個不同的版本彼此接觸,則會導致內存損壞,甚至更糟糕。