【问题标题】:Boost Regex Linking: Can't find library提升正则表达式链接:找不到库
【发布时间】:2013-04-06 12:36:10
【问题描述】:

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

我意识到这是“有据可查的”,但我找不到答案,因为各种帖子使用不同版本的 Boost、不同的编译器、使用 bjam(我使用 b2),似乎暗示了我已经尝试过的内容等。

设置

  • 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”将相关目录包含在项目属性库目录中,以便它知道从哪里链接库(在至少我认为这是这样做的)。

问题

我可以使用(例如)Boost Random Numbers 编译、链接和运行程序。

如果我尝试通过以下方式添加正则表达式功能:

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)。

任何帮助/建议将不胜感激。

【问题讨论】:

  • 你真的编译了 Boost 库吗?具体来说,stage\lib 目录是否包含 libboost_regex.lib 文件(或类似名称)?
  • 查看stage\lib目录。它包含以下文件(与正则表达式相关) - boost_regex-vc100-mt-1_53.dll、boost_regex-vc100-mt-1_53.bib、boost_regex-vc100-mt-gd-1_53.dll、boost_regex-vc100-mt-gd -1_53.bib
  • 您是否#include了boost正则表达式头文件?此外,默认情况下,boost 会自动链接正确的库。您可以显式链接某个库,但您必须设置一个#Define,例如没有自动链接提升。
  • 您是否还通过转到链接器->输入并将其添加到“附加依赖项”中来包含随机库?仅仅添加库目录是不够的。
  • 我也有同样的问题,不知道是怎么回事。

标签: c++ regex boost linker


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题,已经修复了。这种错误主要是你在XX.h文件中声明的函数,但在XX.cpp文件中没有定义(或者XX.cpp文件是没用)

    我的步骤: 1.下载提升

    2.运行boost目录下的命令(需要先生成bjam.exe,参数根据你的电脑而定) bjam --with-regex --toolset=msvc-8.0 --stagedir="E:\download\boost_vc_80" link=static runtime-link=static runtime-link=shared threading=multi debug release

    3.将libboost_regex-vc80-mt-1_55.lib复制到properties->link->input

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

    chnhu@telenav.cn

    【讨论】:

    • 我最近在尝试将项目迁移到VS2015时遇到了类似的问题,我通过使用此命令“--with-regex --toolset=msvc-14.0 address-model”编译boost解决了我的问题=64 --build-type=complete stage --stagedir="F:\download\boost_vc_140" link=static runtime-link=static runtime-link=shared threading=multi debug release"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多