提升链接器错误:无法parsing的外部符号“class boost :: system :: error_category const&__cdecl boost :: system :: get_system_category(void)”

我刚刚开始与Boost第一次,细节:

  1. 我正在使用Visual Studio 2008 SP1
  2. 我正在做一个x64生成
  3. 我只使用boost :: asio(以及它的任何依赖)

我的代码现在编译,我指出我的项目在boost库(build立x64库后),并通过简单的问题,现在我面临一个链接器错误:

2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)" (?get_system_category@system@boost@@YAAEBVerror_category@12@XZ) 2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_generic_category(void)" (?get_generic_category@system@boost@@YAAEBVerror_category@12@XZ) 

有任何想法吗?


我添加了这个定义:#define BOOST_LIB_DIAGNOSTIC

现在在我的输出中我看到这个:

 1>Linking to lib file: libboost_system-vc90-mt-1_38.lib 1>Linking to lib file: libboost_date_time-vc90-mt-1_38.lib 1>Linking to lib file: libboost_regex-vc90-mt-1_38.lib 

这似乎表明这是事实上链接在系统库。

Solutions Collecting From Web of "提升链接器错误:无法parsing的外部符号“class boost :: system :: error_category const&__cdecl boost :: system :: get_system_category(void)”"

我解决了这个问题。 当我打算构建64位库时,我已经构建了32位库。 我修复了我的构建语句,并建立了64位库,现在它工作。

这是我的bjam命令行:

 C:\Program Files (x86)\boost\boost_1_38>bjam --build-dir=c:\boost --build-type=complete --toolset=msvc-9.0 address-model=64 architecture=x86 --with-system 
 #include <boost/system/config.hpp> 

在我的情况下,BOOST_LIB_DIAGNOSTIC没有显示系统被自动链接。我通过简单的包括boost / system / config.hpp解决了这个问题。

您需要链接到boost_system库

我有同样的问题。 我尝试了上面所描述的,但没有任何帮助。 解决方案很简单:首先我使用了一个空的项目,在那里我有链接器错误LNK2019。 但是,当我用stdafx.h创建新的默认Win32控制台应用程序,targetver.h和stdafx.cpp文件的一切工作。 可能会对某人有用,我花了两天的时间

如果在项目中使用boost :: system ,则应该使用并指定x86或x64版本的boost :: system lib。

您可以使用以下批处理文件重新编译Boost库。 将它们保存到Boost根文件夹并在CMD Windows中运行(不要双击!):

 call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86 cd boost_1_60_0 call bootstrap.bat rem Most libraries can be static libraries b2 -j8 toolset=msvc-14.0 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/x64 b2 -j8 toolset=msvc-14.0 address-model=32 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/win32 pause 

欲了解更多详情,你可以看到这篇文章: https : //studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/

我通过搜索链接器错误加上CMAKE来到这个问题,所以我在这里添加这个注释以防其他人以相同的方式发现这个问题。

事实证明,在我的情况下,链接器错误是由于一个错误:

  add_definitions(-DBOOST_ALL_DYN_LINK) 

CMakeLists.txt ,这对Unix来说很好,但在我的情况下不是Windows。 该解决方案不是在Windows上定义的使用。

我需要两个版本和使用阶段目标,所以我用–stagedir =。/ stageX86 for x86版本和默认的./stage for x64

我也来这里为这个链接器错误加CMake,但在我的情况下,这是CMake默认情况下会尝试默认构建与32位。 这是通过指定-Ax64-Ax64

 cmake -Ax64 {path to CMakeLists.txt}