gpt4 book ai didi

c++ - 由于链接错误,我无法构建 boost_regex 代码

转载 作者:太空狗 更新时间:2023-10-29 21:39:23 44 4
gpt4 key购买 nike

我正在尝试在 ubuntu 12.04 (gcc 4.8.2) 上使用 boost_regex。

我已经像这样安装了 boost。

$ 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

关于c++ - 由于链接错误,我无法构建 boost_regex 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33139005/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com