2012-04-12 87 views
2

在boost库目录,我可以看到以下文件:VS 2010 SP1如何选择boost lib文件的版本?

libboost_filesystem-VC100-MT-1_46_1.lib
libboost_filesystem-VC100-MT-1_46_1.pdb
libboost_filesystem-VC100-MT-1_47.lib
libboost_filesystem-VC100-MT-GD-1_46_1.lib
libboost_filesystem-VC100-MT-GD-1_46_1.pdb
libboost_filesystem-VC100-MT-GD-1_47.lib
libboost_filesystem-VC90-MT-1_47.lib
libboost_filesystem-vc90-mt-gd-1_47.lib

当我构建解决方案,下面的警告报道:

警告15警告LNK4099:PDB 'libboost_filesystem-VC100-MT-1_47.pdb' 不与 发现“libboost_filesystem-vc100- mt-1_47.lib(codecvt_error_category.obj)'或 'C:\ source \ Release \ libboost_filesystem-vc100-mt-1_47.pdb';联 对象,如果没有调试 信息C:因为我们\源\ PROJECT1 \ libboost_filesystem-VC100-MT-1_47.lib(codecvt_error_category.obj)

正如你可以看到VS2010选择的libboost_filesystem-vc100-mt-1_47.lib版本,唐在相同的目录下没有libboost_filesystem-vc100-mt-1_47.pdb,链接器抱怨。

问题> VS2010用什么方法来选择哪个版本的boost库链接?

例如,如果我们有以下的库文件,

libboost_filesystem-VC100-MT-1_46_1.lib
libboost_filesystem-VC100-MT-1_47_1.pdb
libboost_filesystem-VC100-MT-1_49_1。 lib

哪个版本将由VS2010选择?

谢谢

回答

2

它通过在boost头文件的#pragma声明确定的 - 所以无论你最终包括报头的版本,这就是LIB它将尝试连接的是哪个版本。

具体来说,可以在升压/配置/ auto_link.hpp发现这一点,它看起来像这样:

# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib") 

这很奇怪的是“的#pragma评论”实际上指示链接器做一些事情......但是这MS是如何做到的?

2

加速版本在这里定义:

C:\ boost1.47 \提升\ version.hpp

// 
// BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION 
// but as a *string* in the form "x_y[_z]" where x is the major version 
// number, y is the minor version number, and z is the patch level if not 0. 
// This is used by <config/auto_link.hpp> to select which library version to link to. 

#define BOOST_LIB_VERSION "1_47" 

C:\ boost1.49 \ boost \ version。HPP

// 
// BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION 
// but as a *string* in the form "x_y[_z]" where x is the major version 
// number, y is the minor version number, and z is the patch level if not 0. 
// This is used by <config/auto_link.hpp> to select which library version to link to. 

#define BOOST_LIB_VERSION "1_49" 

Boost库名称被如下形成:

C:\ boost1.49 \升压\配置\ auto_link.hpp

// 
// now include the lib: 
// 
#if defined(BOOST_LIB_NAME) \ 
     && defined(BOOST_LIB_PREFIX) \ 
     && defined(BOOST_LIB_TOOLSET) \ 
     && defined(BOOST_LIB_THREAD_OPT) \ 
     && defined(BOOST_LIB_RT_OPT) \ 
     && defined(BOOST_LIB_VERSION) 
相关问题