我正在尝试使用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和宏的错误配置。我不太了解这个解释,我也不知道如何让它发挥作用。
如果你能指出我解决问题的正确方向,我将不胜感激。
答案 0 :(得分:8)
您应该尝试将-D_GLIBCXX_USE_CXX11_ABI = 0添加到用于编译它的命令行,并查看是否可以解决问题。
我认为您调用的g ++ / gcc中的一个或另一个很可能不是版本6 ...否则默认情况下会将其设置为1。
答案 1 :(得分:0)
根据链接器的结果,也许ISO C ++不支持它。您可以尝试使用g++ yourfiles.cc -std=c++11