c++ - Travis CI 似乎从错误的 stdlib 中读取

标签 c++ clang c++14 travis-ci

我刚刚开始使用 travis-CI,所以如果这是一个愚蠢或明显的问题,我深表歉意。

按照说明操作here :

我编写了以下 travis.yml

language: cpp

dist: trusty

matrix:
  include:
    - os: linux
      compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-7
      env:
        - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7"
    - os: linux
      compiler: clang
      addons:
        apt:
          sources:
            - llvm-toolchain-trusty-5.0
          packages:
            - clang-5.0
      env:
        - MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0"

before_install:
    - eval "${MATRIX_EVAL}"

script:
    - mkdir build
    - cd build
    - cmake -DCMAKE_VERBOSE_MAKEFILE=ON ..
    - cmake --build .
    - ctest

这会导致 clang 构建中出现以下错误:

/home/travis/build/path_to_project/./include/abulafia/support/type_traits.h:20:12: error: no member named 'decay_t' in namespace 'std'; did you mean 'decay'?

/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1725:11: note: 'decay' declared here

使用以下命令编译时:

cd/home/travis/build/path_to_project/build/tests/char_set &&/usr/bin/clang++-5.0 -Wall -pedantic -Wextra -std=c++17 -I/home/travis/build/path_to_project/./include -I/home/travis/build/path_to_project/googletest/googletest/include -o CMakeFiles/char_set_tests.dir/test_any.cpp.o -c

这告诉我它正在加载 gcc 的库。这里有什么我不明白的地方吗?

谢谢!

最佳答案

是的,这是 travis-ci 构建环境的一个众所周知的问题。它正在针对默认的 ubuntu-trusty libstdc++ 进行编译和链接,这是 gcc 4 系列 stdlib,甚至不符合 C++11。

参见an issue我很久以前就打开了。

如果您需要带有 travis-ci 的 C++14 libstdc++,您应该使用 docker 并制作更新的 ubuntu 镜像。据我所知,这是最好的解决方法。

关于c++ - Travis CI 似乎从错误的 stdlib 中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46417416/

相关文章:

c++ - 访问 range_expression 内的嵌套元素返回不完整的映射(段错误)

c++ - 使用模板与函数的好处以及如何推断模板中的类型

optimization - clang优化错误?

c++ - 获取可调用的输入/输出类型

c++ - 将派生自抽象基类的对象与映射存储在基类指针的 vector 数组中

c++ - reinterpret_cast 与严格别名

gcc - 如何知道 clang 和 gcc 为每个 mcpu 和 March 选项启用了哪些优化?

编译器在打印变量地址时发出警告

c++ - 聚合初始化异常

c++ - 在派生类上将 std::make_unique 与自定义删除器一起使用?