提升正则表达式链接:找不到库

时间:2013-04-14 09:20:58

标签: c++ regex boost linker

我在连接Boost Regex时遇到问题,但我可以运行(编译/链接)其他Boost程序。

我意识到这是“记录良好”但我找不到答案,因为各个帖子使用不同版本的Boost,不同的编译器,使用bjam(我用过b2),似乎暗示我已经尝试过的等等。 / p>

设置

  • Visual Studio 10(我使用的是C ++)

  • Boost版本:1.53.0

  • 初始安装:我跟着How to use Boost in Visual Studio 2010(我到了第二点4)。我没有下载ICU对Regex的支持,因为我认为只有在需要Unicode支持时才需要这样做?

  • 我已通过更新“包含目录”并添加C来包含项目属性中的相关库:....... \ Boost \ boost_1_53_0

  • 我在项目属性库目录中包含了相关目录,添加了“C:..... \ Boost \ boost_1_53_0 \ stage \ lib”,以便它知道库的链接位置(at至少这是我认为这样做的。)

问题

我可以使用(例如)Boost随机数编译,链接和运行程序。

如果我尝试通过说:

添加正则表达式功能
boost::algorithm::split_regex( result, str, regex( "[0-9]+|->" ) )

我收到以下表格的链接错误。

1>Bibtex.obj : error LNK2001: unresolved external symbol "private: class boost::basic_regex<char,struct boost::regex_traits<char,class boost::w32_regex_traits<char> > > & __thiscall boost::basic_regex<char,struct boost::regex_traits<char,class boost::w32_regex_traits<char> > >::do_assign(char const *,char const *,unsigned int)" (?do_assign@?$basic_regex@DU?$regex_traits@DV?$w32_regex_traits@D@boost@@@boost@@@boost@@AAEAAV12@PBD0I@Z)
1>Bibtex.obj : error LNK2001: unresolved external symbol "public: bool __thiscall boost::re_detail::perl_matcher<class std::_String_const_iterator<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<struct boost::sub_match<class std::_String_const_iterator<char,struct std::char_traits<char>,class std::allocator<char> > > >,struct boost::regex_traits<char,class boost::w32_regex_traits<char> > >::find(void)" (?find@?$perl_matcher@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@U?$sub_match@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@boost@@@2@U?$regex_traits@DV?$w32_regex_traits@D@boost@@@boost@@@re_detail@boost@@QAE_NXZ)
1>Bibtex.obj : error LNK2001: unresolved external symbol "private: void __thiscall boost::re_detail::perl_matcher<class std::_String_const_iterator<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<struct boost::sub_match<class std::_String_const_iterator<char,struct std::char_traits<char>,class std::allocator<char> > > >,struct boost::regex_traits<char,class boost::w32_regex_traits<char> > >::construct_init(class boost::basic_regex<char,struct boost::regex_traits<char,class boost::w32_regex_traits<char> > > const &,enum boost::regex_constants::_match_flags)" (?construct_init@?$perl_matcher@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@U?$sub_match@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@boost@@@2@U?$regex_traits@DV?$w32_regex_traits@D@boost@@@boost@@@re_detail@boost@@AAEXABV?$basic_regex@DU?$regex_traits@DV?$w32_regex_traits@D@boost@@@boost@@@3@W4_match_flags@regex_constants@3@@Z)
1>C:\Users\kzzgrk\Dropbox\Projects\classes\Bibtex\BibtexFramework\Debug\BibtexFramework.exe : fatal error LNK1120: 3 unresolved externals

我不知道如何解决这个问题,因为我似乎已经尝试了一切。我能想到的唯一可能性是我需要使用b2命令行程序构建boost库,但是我无法找到应该推荐的内容(正如我上面提到的那样,很多引用都是bjam)

非常感谢任何帮助/建议。

2 个答案:

答案 0 :(得分:2)

我发现了一个可能的原因,可以帮助一些人。基本上,我已经为 64位构建了Boost,但默认情况下,我创建的应用程序是 32位。这适用于大多数库,但不适用于正则表达式lib,因此错误。将项目切换到64位,现在一切都很好。

答案 1 :(得分:0)

我遇到了同样的问题并修复了它。这种错误主要是由您在XX.h文件中声明的函数引起的,但是没有在XX.cpp文件中定义它(或者XX.cpp文件是无用)

我的步骤: 1.下载提升

2.运行boost目录中的命令(首先需要生成bjam.exe,参数应该根据你的PC) bjam --with-regex --toolset = msvc-8.0 --stagedir =&#34; E:\ download \ boost_vc_80&#34; link = static runtime-link = static runtime-link = shared threading = multi debug release

3.copy libboost_regex-vc80-mt-1_55.lib to properties-&gt; link-&gt; input

再次构建您的项目,修复!

chnhu@telenav.cn