c++ - Travis CI 上 Boost 中对 `std::__cxx11::basic_string 的 undefined reference

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

我正在尝试获取一个使用 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。

This is documented here

关于c++ - Travis CI 上 Boost 中对 `std::__cxx11::basic_string 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705852/

相关文章:

c++ - RAII 资源处理

c++ - 如何将来自用户定义文字的可变字符模板参数转换回数字类型?

c++ - QImage数组的动态分配

c++ - 'operator[]' 的多个重载实例化为相同的签名

c++ - std::unique_lock 移动语义

c++ - gcc6.x 中的 constexpr 优化错误?

c++ - 如何从包含 csv 数据的字符串创建字符串数组?

gcc - (奇怪?)GCC 预处理器行为

linux - 如何链接共享库的特定名称(版本)

c++ - 在 Debug模式下工作