使用 Boost 无法解析的外部符号
Unresolved external symbols with Boost
我正在尝试从 Getting Started Guide 编译 Boost.Regex 程序,但即使我正在链接所需的库,我也会得到一些未解析的外部符号:
1>------ Build started: Project: Project1, Configuration: Debug Win32 ------
1> main.cpp
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall boost::re_detail_106100::raw_storage::resize(unsigned int)" (?resize@raw_storage@re_detail_106100@boost@@QAEXI@Z) referenced in function "public: void * __thiscall boost::re_detail_106100::raw_storage::extend(unsigned int)" (?extend@raw_storage@re_detail_106100@boost@@QAEPAXI@Z)
1>main.obj : error LNK2019: unresolved external symbol "public: void * __thiscall boost::re_detail_106100::raw_storage::insert(unsigned int,unsigned int)" (?insert@raw_storage@re_detail_106100@boost@@QAEPAXII@Z) referenced in function "public: struct boost::re_detail_106100::re_syntax_base * __thiscall boost::re_detail_106100::basic_regex_creator<char,struct boost::regex_traits<char,class boost::cpp_regex_traits<char> > >::insert_state(int,enum boost::re_detail_106100::syntax_element_type,unsigned int)" (?insert_state@?$basic_regex_creator@DU?$regex_traits@DV?$cpp_regex_traits@D@boost@@@boost@@@re_detail_106100@boost@@QAEPAUre_syntax_base@23@HW4syntax_element_type@23@I@Z)
1>C:\Users\unknown\Documents\Visual Studio 2015\Projects\Project1\Debug\Project1.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
这是代码(取自here):
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
std::string line;
boost::regex pat("^Subject: (Re: |Aw: )*(.*)");
while (std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
}
一些信息:
- 这发生在调试和发布
- 我无法在 x64 下构建项目,因为库是 x86
- 我使用
bootstrap
构建静态库,然后b2
- 我包含了
libboost_regex-vc140-mt-1_61.lib
(libboost_regex-vc140-mt-gd-1_61.lib
用于调试)
- 不使用 Unicode 字符集(在 Visual Studio 项目属性中)
- 我正在使用 Visual Studio 2015
- 我正在使用 Boost 1.61
- 这发生在每个需要库的Boost代码
- 这显然不会发生在只有头文件的 Boost 库中
有什么想法吗?
这 link http://lists.boost.org/boost-users/2010/04/57957.php 表明编译器标志在构建 boost 库和您的项目之间存在一些差异
我正在尝试从 Getting Started Guide 编译 Boost.Regex 程序,但即使我正在链接所需的库,我也会得到一些未解析的外部符号:
1>------ Build started: Project: Project1, Configuration: Debug Win32 ------ 1> main.cpp 1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall boost::re_detail_106100::raw_storage::resize(unsigned int)" (?resize@raw_storage@re_detail_106100@boost@@QAEXI@Z) referenced in function "public: void * __thiscall boost::re_detail_106100::raw_storage::extend(unsigned int)" (?extend@raw_storage@re_detail_106100@boost@@QAEPAXI@Z) 1>main.obj : error LNK2019: unresolved external symbol "public: void * __thiscall boost::re_detail_106100::raw_storage::insert(unsigned int,unsigned int)" (?insert@raw_storage@re_detail_106100@boost@@QAEPAXII@Z) referenced in function "public: struct boost::re_detail_106100::re_syntax_base * __thiscall boost::re_detail_106100::basic_regex_creator<char,struct boost::regex_traits<char,class boost::cpp_regex_traits<char> > >::insert_state(int,enum boost::re_detail_106100::syntax_element_type,unsigned int)" (?insert_state@?$basic_regex_creator@DU?$regex_traits@DV?$cpp_regex_traits@D@boost@@@boost@@@re_detail_106100@boost@@QAEPAUre_syntax_base@23@HW4syntax_element_type@23@I@Z) 1>C:\Users\unknown\Documents\Visual Studio 2015\Projects\Project1\Debug\Project1.exe : fatal error LNK1120: 2 unresolved externals ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
这是代码(取自here):
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
std::string line;
boost::regex pat("^Subject: (Re: |Aw: )*(.*)");
while (std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
}
一些信息:
- 这发生在调试和发布
- 我无法在 x64 下构建项目,因为库是 x86
- 我使用
bootstrap
构建静态库,然后b2
- 我包含了
libboost_regex-vc140-mt-1_61.lib
(libboost_regex-vc140-mt-gd-1_61.lib
用于调试) - 不使用 Unicode 字符集(在 Visual Studio 项目属性中)
- 我正在使用 Visual Studio 2015
- 我正在使用 Boost 1.61
- 这发生在每个需要库的Boost代码
- 这显然不会发生在只有头文件的 Boost 库中
有什么想法吗?
这 link http://lists.boost.org/boost-users/2010/04/57957.php 表明编译器标志在构建 boost 库和您的项目之间存在一些差异