我正在尝试获取一个使用 GitHub 上的 Boost 的 C+++ 项目,以便在 Travis CI 上正确编译。
首先我在 ubuntu 上尝试了包和 PPA,但是它们太旧了(我至少需要 Boost 1.61)。
只有当我在 Travis CI 上编译 Boost(下载、编译)时我才能让它工作,但不幸的是,编译时间很长(11-18 分钟)并且日志文件非常大。
考虑如何解决这个问题,我考虑在我的机器上编译 boost,压缩,上传到一些网络服务器,然后下载并复制到/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&)'
我用谷歌搜索了这个errors我发现某些 C++11 ABI 和宏可能存在配置错误。我不太理解解释,也不知道如何让它发挥作用。
如果您能指出解决此问题的正确方向,我将不胜感激。
最佳答案
您应该尝试将 -D_GLIBCXX_USE_CXX11_ABI=0 添加到用于编译它的命令行,看看是否可以解决问题。
我认为您正在调用的 g++/gcc 中的一个或另一个很可能不是版本 6 ...否则默认情况下会将其设置为 1 iirc。
关于c++ - Travis CI 上 Boost 中对 `std::__cxx11::basic_string 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705852/