2015-10-15 106 views
2

我想在Ubuntu 12.04(gcc 4.8.2)上使用boost_regex。我不能建立boost_regex代码,因为链接erros

我已经安装了这样的提升。

$ sudo apt-get install libboost-all-dev 

而且我已经确认安装了boost_regex库。

$ ls /usr/lib/x86_64-linux-gnu | grep regex 
libboost_regex.a 
libboost_regex.so 
libboost_regex.so.1.54.0 

然后,我试图建立一个正则表达式程序代码。但我面临链接错误。那么我应该添加链接库?

#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; 
    } 
} 


$ g++ -Wall -std=c++11 -o out test2.cc -lboost_regex 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `icu_52::Locale::~Locale()' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `u_charType_52' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `icu_52::Locale::Locale(icu_52::Locale const&)' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `u_digit_52' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `icu_52::Collator::createInstance(icu_52::Locale const&, UErrorCode&)' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `icu_52::Locale::Locale()' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `u_charFromName_52' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `u_tolower_52' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `u_isspace_52' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_regex.so: undefined reference to `u_isblank_52' 
collect2: error: ld returned 1 exit status 

回答

0

我已经把你的代码中TEST.CPP

我只是测试编译这样的代码:

g++ test.cpp -lboost_regex 

我没有任何错误,现在,它的工作

当然我之前使用这个命令:

sudo apt-get install libboost-all-dev 

ubuntu下测试15.04

2

libboost-dev-all取决于(使用dpkg --status):

libboost-dev 
libboost-tools-dev 
libboost-atomic-dev 
libboost-chrono-dev 
libboost-context-dev 
libboost-coroutine-dev 
libboost-date-time-dev 
libboost-exception-dev 
libboost-filesystem-dev 
libboost-graph-dev 
libboost-graph-parallel-dev 
libboost-iostreams-dev 
libboost-locale-dev 
libboost-log-dev 
libboost-math-dev 
libboost-mpi-dev 
libboost-mpi-python-dev 
libboost-program-options-dev 
libboost-python-dev 
libboost-random-dev 
libboost-regex-dev 
libboost-serialization-dev 
libboost-signals-dev 
libboost-system-dev 
libboost-test-dev 
libboost-thread-dev 
libboost-timer-dev 
libboost-wave-dev 

正如你可以看到,例如libboost-regex-dev不包含库:

$ dpkg --listfiles libboost-regex-dev 
/. 
/usr 
/usr/share 
/usr/share/doc 
/usr/share/doc/libboost-regex-dev 
/usr/share/doc/libboost-regex-dev/copyright 
/usr/share/doc/libboost-regex-dev/changelog.gz 

这是因为libboost-regex-dev取决于libboost-regex1.54-dev

$ dpkg --listfiles libboost-regex1.54-dev 
/. 
/usr 
/usr/share 
/usr/share/doc 
/usr/share/doc/libboost-regex1.54-dev 
/usr/share/doc/libboost-regex1.54-dev/copyright 
/usr/lib 
/usr/lib/x86_64-linux-gnu 
/usr/lib/x86_64-linux-gnu/libboost_regex.a 
/usr/share/doc/libboost-regex1.54-dev/changelog.Debian.gz 
/usr/lib/x86_64-linux-gnu/libboost_regex.so 

啊!但它需要ICU:

$ ldd /usr/lib/x86_64-linux-gnu/libboost_regex.so 
linux-vdso.so.1 => (0x00007ffc265fb000) 
libicuuc.so.52 => /usr/lib/x86_64-linux-gnu/libicuuc.so.52 (0x00007feb20dc0000) 
libicui18n.so.52 => /usr/lib/x86_64-linux-gnu/libicui18n.so.52 (0x00007feb209b9000) 
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007feb2063d000) 
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007feb20426000) 
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feb20208000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feb1fe43000) 
libicudata.so.52 => /usr/lib/x86_64-linux-gnu/libicudata.so.52 (0x00007feb1e5d6000) 
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feb1e3d2000) 
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007feb1e0cc000) 
/lib64/ld-linux-x86-64.so.2 (0x00007feb21440000) 

那么,谁提供的?

$ dpkg --search /usr/lib/x86_64-linux-gnu/libicuuc.so.52 
libicu52:amd64: /usr/lib/x86_64-linux-gnu/libicuuc.so.52 

有您的线索:

解决方案

$ sudo apt-get install libicu52 
+0

sehe你总是惊奇:-)我跟着我的Gentoo系统类似的步骤,让我的提振高兴。在我的情况下,我碰到了我的盒子而没有重建提升,并且提升没有找到libicu,因为当我转移到v58时它正在寻找v57。重建提升,固定。谢谢你另一个有用的答案。 – moodboom

相关问题