2010-06-02 53 views
5

我試圖用MSVC 2010而不是GCC來構建我的應用程序。使用GCC一切正常。我的應用程序使用boost_system和boost_thread庫。 我建與VC2010提升在「系統」的佈局,這意味着庫命名爲剛剛libboost_system.lib(而不是libboost_system_compiler_threading_version_wtf_snafu.lib) 該庫位於C:\升壓\ lib中, Makefile中指定VC++ 2010想鏈接我甚至沒有指定的提升庫文件

LFLAGS  = /NOLOGO /INCREMENTAL:NO /SUBSYSTEM:CONSOLE 
LIBS   = /LIBPATH:C:/Boost/lib libboost_system.lib libboost_thread.lib Ws2_32.lib 

調用時NMAKE彙編,而是試圖用

LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_43.lib 

我的意思是嚴重鏈接它退出時,WTF?我告訴它鏈接libboost_systen.lib和libboost_thread.lib它怎麼試圖鏈接libboost_data_time,爲什麼它假設我在標記的佈局中構建了庫? 我怎樣才能阻止MSVC試圖變得聰明,並猜測我可能想要鏈接?

謝謝, 菲利普

回答

5

這與用於自動連接兼容的編譯器的升壓庫的特徵。

(那些令人費解的庫名覆蓋線程和連接可用的平臺上選擇的無數;還有在Windows上使用該公約......很好的理由)這裏

的更多信息:

http://www.boost.org/doc/libs/1_33_1/more/getting_started.html#auto-link

我找不到更新版本的頁面,但我相信BOOST_ALL_NO_LIB和相關選項在1.43中仍然有效。

+0

嘿,那個定義做了伎倆。謝謝。 – Philipp 2010-06-02 20:11:14

1

假設您是自動鏈接的(即您已定義BOOST_ALL_DYN_LINK或庫特定的等效項)。

對於佈局「系統」,你必須定義預處理宏:

BOOST_AUTO_LINK_NOMANGLE 

鏈接到正確的庫名。

對於佈局「標籤」,你必須定義預處理宏:

BOOST_AUTO_LINK_TAGGED 

鏈接到正確的庫名。

我不知道你是否可以對某些庫進行重寫,並保留其他庫的默認值。這將是我想象的非常麻煩的設置。

相關問題