您的位置:首页 > 编程语言 > C语言/C++

folly编译错误boost::re_detail_106100::cpp_regex_traits_implementation<char>::transform解决办法

2018-02-01 13:41 966 查看
make编译folly时报错如下:

make[4]: Entering directory '/home/montafan/git/folly/folly/folly/experimental/logging/example'
/bin/bash ../../../libtool  --tag=CXX   --mode=link g++  -std=gnu++1y -g -O2 -lboost_context -lboost_program_options -lboost_thread -lboost_filesystem -lboost_system -lboost_regex -lpthread -lboost_chrono  -lssl -lcrypto  -o logging_example main.o libfollylogging_example.la -lbz2 -llzma -lz -lsnappy -llz4 -liberty -ldl -levent -ldouble-conversion -lglog -lgflags
libtool: link: g++ -std=gnu++1y -g -O2 -o .libs/logging_example main.o  ./.libs/libfollylogging_example.a /home/montafan/git/folly/folly/folly/experimental/logging/.libs/libfollylogging.so /home/montafan/git/folly/folly/folly/.libs/libfolly.so -lunwind -lboost_context -lboost_program_options -lboost_thread -lboost_filesystem -lboost_system -lboost_regex -lpthread -lboost_chrono -lssl -lcrypto -lbz2 -llzma -lz -lsnappy -llz4 -liberty -ldl -levent -ldouble-conversion -lglog -lgflags
/home/montafan/git/folly/folly/folly/.libs/libfolly.so: undefined reference to `boost::re_detail_106100::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'
/home/montafan/git/folly/folly/folly/.libs/libfolly.so: undefined reference to `boost::re_detail_106100::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
/home/montafan/git/folly/folly/folly/.libs/libfolly.so: undefined reference to `boost::re_detail_106100::perl_matcher<char const*, std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
/home/montafan/git/folly/folly/folly/.libs/libfolly.so: undefined reference to `boost::re_detail_106100::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'
/home/montafan/git/folly/folly/folly/.libs/libfolly.so: undefined reference to `boost::re_detail_106100::raise_runtime_error(std::runtime_error const&)'
/home/montafan/git/folly/folly/folly/.libs/libfolly.so: undefined reference to `boost::re_detail_106100::get_mem_block()'
/home/montafan/git/folly/folly/folly/.libs/libfolly.so: undefined reference to `boost::re_detail_106100::get_default_error_string(boost::regex_constants::error_type)'
/home/montafan/git/folly/folly/folly/.libs/libfolly.so: undefined reference to `boost::re_detail_106100::put_mem_block(void*)'
/home/montafan/git/folly/folly/folly/.libs/libfolly.so: undefined reference to `boost::re_detail_106100::verify_options(unsigned int, boost::regex_constants::_match_flags)'

问题解决过程:

stackoverflow某个帖子说是多个版本的boost会导致该问题
但sudo ldconfig -v|grep boost发现版本是1.61,而且并没有重复安装其他版本的boost

再仔细看原来是Boost::Regex模块有问题,然后一搜果然发现问题,怎么有1.61和1.58两个版本
libboost_regex.so.1.58.0 -> libboost_regex.so.1.58.0
libboost_regex.so.1.61.0 -> libboost_regex.so.1.61.0

使用1.61.0,编译所有组建,成功
./bootstrap.sh --with-python=python3
sudo ./b2 --toolset=gcc --build-type=complete --layout=versioned --with-atomic --with-chrono --with-container --with-context --with-coroutine --with-coroutine2 --with-date_time --with-exception --with-filesystem --with-graph --with-graph_parallel --with-iostreams --with-locale --with-log --with-math --with-metaparse --with-mpi --with-program_options --with-python --with-random --with-regex --with-serialization --with-signals --with-system --with-test --with-thread --with-timer --with-type_erasure --with-wave  stage

安装

sudo ./b2 install --prefix=/usr/local

成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐