V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
niuoh
V2EX  ›  C

关于 ubuntu 下使用 C++ boost::regex 库的问题

  •  
  •   niuoh · 2016-05-09 08:12:31 +08:00 · 2311 次点击
    这是一个创建于 3150 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在 ubuntu 下 使用命令 apt-get install libboost-dev 安装了 boost 库
    使用 boost:cast_lexical 正常
    但使用 boost:regex 库时 光引用#include <boost/regex.hpp> 这条语句正常
    但使用 regex reg("([a-z]+)");这条语句时 编译报错

    /tmp/ccpdAoXx.o :在函数‘ boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)’中: learn.cpp:(.text._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j[_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j]+0x2a):对‘ boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)’未定义的引用 collect2: error: ld returned 1 exit status

    编译语句就是 g++ test.cpp -o test
    在网上搜索了一下 说是 boost:regex 需要另外编译安装?
    ubuntu 下能通过包的方式安装吗
    我已经通过包的方式安装了 boost 库 再编译安装 boost 的 regex 库会不会出问题呢?
    还是编译命令应该是怎样的?

    14 条回复    2016-06-16 14:53:09 +08:00
    niuoh
        1
    niuoh  
    OP
       2016-05-09 08:15:53 +08:00
    忘了说了 我已经用了 using namespace boost;
    MCVector
        2
    MCVector  
       2016-05-09 08:18:34 +08:00 via Android
    编译命令最后加一个 -lost 试试
    MCVector
        3
    MCVector  
       2016-05-09 08:19:10 +08:00 via Android
    * -lboost
    niuoh
        4
    niuoh  
    OP
       2016-05-09 08:19:32 +08:00
    @MCVector <be>
    root@system:/home/c++# g++ test.cpp -o test -lost
    /usr/bin/ld: 找不到 -lost
    collect2: error: ld returned 1 exit status
    niuoh
        5
    niuoh  
    OP
       2016-05-09 08:20:15 +08:00
    @MCVector <br>
    root@system:/home/c++# g++ test.cpp -o test -lboost
    /usr/bin/ld: 找不到 -lboost
    collect2: error: ld returned 1 exit status
    yuyang1110
        6
    yuyang1110  
       2016-05-09 08:50:32 +08:00
    这是连接错呀,不是编译错。。。你找一下那个符号对应的连接库是啥,加到连接参数里。。。
    rogerchen
        7
    rogerchen  
       2016-05-09 08:51:49 +08:00
    sudo apt-get install libboost-all-dev

    libboost-dev 只是推荐安装所有库,不会默认安装的
    araraloren
        9
    araraloren  
       2016-05-09 08:55:48 +08:00
    你需要链接`boost`的`regex`库:`-lboost_regex`
    niuoh
        10
    niuoh  
    OP
       2016-05-09 08:59:15 +08:00
    感谢 其实我在网上看到的 但我是 ubuntu16.04 因为依赖关系 运行不了这条命令 我去 docker 下试试把!
    MCVector
        11
    MCVector  
       2016-05-09 12:20:10 +08:00 via Android
    试试 `libboost_regex-mt`

    http://stackoverflow.com/questions/12446471/linker-error-in-boost-regex

    当然一切的前提是你要装了 libboost 。
    hitmanx
        12
    hitmanx  
       2016-05-09 15:23:42 +08:00
    记得 regex 库不是 header-only 的,你需要 link 它的
    hitmanx
        13
    hitmanx  
       2016-05-09 15:26:01 +08:00
    另外 16.04 自带的 gcc 估计支持 c++11 的 regex 没啥问题了(老版本的记得是定义了,但是部分未实现),所以你直接用 std::regex 替换 boost::regex 应该也可以。
    stormpeach
        14
    stormpeach  
       2016-06-16 14:53:09 +08:00
    有人测过匹配速度是 std::regex>boost::regex>"regex"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5500 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:36 · PVG 09:36 · LAX 17:36 · JFK 20:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.