我刚开始使用Boost,第一次,详情:
我的代码现在编译了,我将我的项目指向了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
这似乎表明它在系统库中实际上是链接。
答案 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
该错误可能是由于链接顺序引起的。