在Travis CI上的Boost中对`std :: __ cxx11 :: basic_string的未定义引用

时间:2016-11-20 15:33:04

标签: c++ c++11 gcc boost travis-ci

我正在尝试使用GitHub上的Boost在Travis CI上正确编译的C +++项目。

首先我尝试了ubuntu上的软件包和PPA,但它们太旧了(我至少需要Boost 1.61)。

只有当我在Travis CI(下载,编译)上编译Boost时才能使用它,但不幸的是,编译时间很长(11-18分钟)并且日志文件非常庞大。

考虑如何解决这个问题,我想到了编译我的机器上的提升,压缩,上传到某个Web服务器,只需在/ usr / local / [include / lib]下载和复制相应的文件。

Here是我在我的机器上使用的编译器。我使用

编译了boost
./bootstrap.sh --prefix=/home/andrei/boostabc
/usr/bin/time ./b2 install link=static

Here是travis文件(和存储库)。在评论中是我通过编译boost来实现的。

问题是我遇到了很多错误:

/usr/local/lib/libboost_filesystem.a(operations.o): In function `(anonymous namespace)::dir_itr_first(void*&, void*&, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, boost::filesystem::file_status&, boost::filesystem::file_status&) [clone .isra.46] [clone .constprop.56]':
operations.cpp:(.text+0xa8): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

我用Google搜索了errors,发现可能存在关于某些C ++ 11 ABI和宏的错误配置。我不太了解这个解释,我也不知道如何让它发挥作用。

如果你能指出我解决问题的正确方向,我将不胜感激。

2 个答案:

答案 0 :(得分:8)

您应该尝试将-D_GLIBCXX_USE_CXX11_ABI = 0添加到用于编译它的命令行,并查看是否可以解决问题。

我认为您调用的g ++ / gcc中的一个或另一个很可能不是版本6 ...否则默认情况下会将其设置为1。

This is documented here

答案 1 :(得分:0)

根据链接器的结果,也许ISO C ++不支持它。您可以尝试使用g++ yourfiles.cc -std=c++11

进行编译
相关问题