簡體   English   中英

由於鏈接錯誤,我無法構建boost_regex代碼

[英]I cannot build boost_regex code because of link erros

我正在嘗試在ubuntu 12.04(gcc 4.8.2)上使用boost_regex。

我安裝了這樣的提升。

$ 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

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

我把你的代碼放在test.cpp中

我剛剛測試了如下編譯代碼:

g++ test.cpp -lboost_regex

我現在沒有任何錯誤,它正在發揮作用

當然我之前使用過這個命令:

sudo apt-get install libboost-all-dev

在ubuntu 15.04下測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM