【问题标题】:linking to boost with visual studio 2013使用visual studio 2013链接到boost
【发布时间】:2014-12-22 14:08:27
【问题描述】:

我正在尝试链接到 Visual Studio 2013 中的几个 boost 库(需要编译的库),但在这样做时遇到了麻烦。

我已经通过命令行运行安装了 boost 文件

boostrap.bat

b2 --toolset=msvc-12.0 --build-type=complete architecture=x86 address-model=64 stage

以便库位于 C:\boost_1_56_0/stage/lib

在我的项目中,我进入配置属性>c/c++>General>其他包含目录并包含 C:\boost_1_56_0 并包含标题,例如 #include<boost/serialization/vector.hpp> 等等

然后我转到配置属性>链接器>附加库依赖项并包括 C:\boost_1_56_0\stage\lib

我现在知道 boost 使用自动链接,所以我确保没有尝试在配置属性>链接器>输入>附加依赖项中将链接定向到 boost 库

但是我仍然收到(许多)以下类型的链接器错误:

error LNK2001: unresolved external symbol "public: void __thiscall boost::archive::detail::basic_oarchive::end_preamble(void)" (?end_preamble@basic_oarchive@detail@archive@boost@@QAEXXZ)

我发现的所有相关问题都与对 boost 的自动链接工具的误解有关,但我现在正在明确地做我应该做的事情(据我所知)。它可以找到头文件,并且库文件是我指导链接器查找它们的地方。

我可能做错了什么?

【问题讨论】:

  • 您是否尝试过预处理文件选项并检查 .i 文件以查看生成的内容?

标签: c++ visual-studio boost linker


【解决方案1】:

在 Visual Studio 中有大量文章在堆栈溢出中链接 boost。我发现其中一个最少/完整的是How to use Boost in Visual Studio 2010

【讨论】:

  • 我基本上明确地遵循了这一点,但仍然出现链接错误
【解决方案2】:

我刚刚遇到类似的问题,并与您分享我的想法。 您可能正在编译 32 位和 64 位库以进行增强。因此,我猜您可能有两个目录,其中包含具有相同名称但构建在不同平台上的库,例如 $(BOOST154_NEW_HOME)\lib_x64 和 $(BOOST154_NEW_HOME)\lib_x86。您应该在配置属性>链接器>附加库依赖项中包含这两个路径。虽然 boost 是使用 auto_link 来找出你要使用哪个库,但它仍然对需要导入 32 位或 64 位下的哪个库感到困惑。

我的建议是您应该在配置属性>链接器>附加库依赖项中仅包含 64 位 boost libs 目录。

【讨论】:

  • 我们可以给它添加一个完整的目录吗?我认为我们应该只添加 .lib 文件
猜你喜欢
  • 2016-12-20
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多