VC ++ 2010想要链接我甚至没有指定的boost库

时间:2010-06-02 19:25:17

标签: visual-c++ visual-studio-2010 boost linker

我正在尝试使用MSVC 2010而不是GCC构建我的应用程序。 GCC一切正常。我的应用程序使用boost_system和boost_thread库。 我在“系统”布局中使用VC2010构建了boost,这意味着库只被命名为libboost_system.lib(而不是libboost_system_compiler_threading_version_wtf_snafu.lib) libs驻留在C:\ Boost \ lib中, Makefile指定

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的,为什么它假设我在“标记”布局中构建了lib? 我怎样才能阻止MSVC变得聪明并猜测我可能想要链接的内容?

谢谢, 菲利普

2 个答案:

答案 0 :(得分:5)

这是Boost libs的一个功能,它具有兼容的自动链接编译器。

(那些错综复杂的库名称涵盖了平台上可用的无数线程和链接选项;在Windows上使用该约定的理由很充分......)

此处提供更多信息:

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

我找不到更新版本的页面,但我相信BOOST_ALL_NO_LIB和相关选项在1.43中仍然有效。

答案 1 :(得分:1)

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

对于布局'系统'你必须定义预处理器宏:

BOOST_AUTO_LINK_NOMANGLE

链接到正确的库名称。

对于布局'已标记'你必须定义预处理器宏:

BOOST_AUTO_LINK_TAGGED

链接到正确的库名称。

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