VC++ 2010想链接我甚至没有指定的提升库文件

问题描述:

我试图用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试图变得聪明,并猜测我可能想要链接?

谢谢, 菲利普

这与用于自动连接兼容的编译器的升压库的特征。

(那些令人费解的库名覆盖线程和连接可用的平台上选择的无数;还有在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

假设您是自动链接的(即您已定义BOOST_ALL_DYN_LINK或库特定的等效项)。

对于布局“系统”,你必须定义预处理宏:

BOOST_AUTO_LINK_NOMANGLE 

链接到正确的库名。

对于布局“标签”,你必须定义预处理宏:

BOOST_AUTO_LINK_TAGGED 

链接到正确的库名。

我不知道你是否可以对某些库进行重写,并保留其他库的默认值。这将是我想象的非常麻烦的设置。