Boost链接器错误:未解析的外部符号“class boost :: system :: error_category const& __cdecl boost :: system :: get_system_category(void)”

时间:2009-06-30 21:06:08

标签: c++ windows 64-bit boost-asio

我刚开始使用Boost,第一次,详情:

  1. 我正在使用Visual Studio 2008 SP1
  2. 我正在做x64 Build
  3. 我只使用boost :: asio(以及它拥有的任何依赖项)
  4. 我的代码现在编译了,我将我的项目指向了boost库(在构建了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
    

    这似乎表明它在系统库中实际上是链接。

10 个答案:

答案 0 :(得分:44)

我解决了这个问题。当我打算构建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

答案 1 :(得分:5)

#include <boost/system/config.hpp>

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

答案 2 :(得分:1)

您需要链接boost_system库

答案 3 :(得分:1)

如果在项目中使用 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/

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我通过搜索链接器错误加上CMAKE来解决问题,所以我在这里添加此评论以防其他人以同样的方式发现此问题。

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

    add_definitions(-DBOOST_ALL_DYN_LINK)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

修复了此问题
cmake -Ax64 {path to CMakeLists.txt}

答案 8 :(得分:0)

在此线程之前,没有一种方法可以为我工作。 然后我检查了boost系统文件夹中的文件,并在下面的#define

中尝试过

#define BOOST_ERROR_CODE_HEADER_ONLY

使用此链接后,链接错误已解决。

答案 9 :(得分:0)

就我而言,我通过将boost include dir从以下位置移出来解决了此问题

Project -> Properties-> VC++ Directories -> Include Directories

Project -> Properties-> C/C++ -> General -> Additional Include Directories

,然后将boost lib dir从中移出

Project -> Properties-> VC++ Directories -> Library Directories

Project -> Properties-> Linker -> General -> Additional Library Directories

该错误可能是由于链接顺序引起的。