我在 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 库会不会出问题呢?
还是编译命令应该是怎样的?
1
niuoh OP 忘了说了 我已经用了 using namespace boost;
|
2
MCVector 2016-05-09 08:18:34 +08:00 via Android
编译命令最后加一个 -lost 试试
|
3
MCVector 2016-05-09 08:19:10 +08:00 via Android
* -lboost
|
4
niuoh OP @MCVector <be>
root@system:/home/c++# g++ test.cpp -o test -lost /usr/bin/ld: 找不到 -lost collect2: error: ld returned 1 exit status |
5
niuoh OP @MCVector <br>
root@system:/home/c++# g++ test.cpp -o test -lboost /usr/bin/ld: 找不到 -lboost collect2: error: ld returned 1 exit status |
6
yuyang1110 2016-05-09 08:50:32 +08:00
这是连接错呀,不是编译错。。。你找一下那个符号对应的连接库是啥,加到连接参数里。。。
|
7
rogerchen 2016-05-09 08:51:49 +08:00
sudo apt-get install libboost-all-dev
libboost-dev 只是推荐安装所有库,不会默认安装的 |
8
rogerchen 2016-05-09 08:53:27 +08:00
|
9
araraloren 2016-05-09 08:55:48 +08:00
你需要链接`boost`的`regex`库:`-lboost_regex`
|
10
niuoh OP 感谢 其实我在网上看到的 但我是 ubuntu16.04 因为依赖关系 运行不了这条命令 我去 docker 下试试把!
|
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 。 |
12
hitmanx 2016-05-09 15:23:42 +08:00
记得 regex 库不是 header-only 的,你需要 link 它的
|
13
hitmanx 2016-05-09 15:26:01 +08:00
另外 16.04 自带的 gcc 估计支持 c++11 的 regex 没啥问题了(老版本的记得是定义了,但是部分未实现),所以你直接用 std::regex 替换 boost::regex 应该也可以。
|
14
stormpeach 2016-06-16 14:53:09 +08:00
有人测过匹配速度是 std::regex>boost::regex>"regex"
|