2015-10-15 103 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

相關問題