【问题标题】:undefined reference to `std::__cxx11::basic_string in Boost on Travis CITravis CI 上的 Boost 中对 `std::__cxx11::basic_string 的未定义引用
【发布时间】:2017-04-04 00:04:13
【问题描述】:

我正在尝试获取一个 C++ 项目,该项目使用 GitHub 上的 Boost 在 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 文件(和存储库)。在 cmets 中是我编译 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 和宏的错误配置。我不太理解这个解释,也不知道如何让它发挥作用。

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

【问题讨论】:

  • 也使用 Travis CI 进行 boost,但将其设为一个单独的项目,它将获取源代码、构建 boost、打包它并上传到存储库(例如“一些网络服务器”)。我在我的 CI 系统中使用了类似的过程,除了我使用工件存储库和依赖管理将事物联系在一起。如果每次提交都会触发所有使用的依赖项的构建,那会发疯。

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


【解决方案1】:

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

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

This is documented here

【讨论】:

  • 我确信我使用 gcc 6.2 在我的机器上构建了 boost(我有 bin.v2/libs/atomic/gcc-6.2.0 之类的文件夹。Travis 的 Cmake 确认我使用的是 6.2。 0(CXX 编译器标识是 GNU 6.2.0)。我不知道还有什么地方会使用另一个版本的 gcc。我会尝试使用该标志进行编译(比如 b2 install -D_GLIBCXX_USE_CXX11_ABI=0 ?)。跨度>
【解决方案2】:

可能ISO C++不支持,根据linker的结果,可以尝试用g++ yourfiles.cc -std=c++11编译

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 2013-07-03
    • 2011-12-04
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2018-03-11
    相关资源
    最近更新 更多