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

Fra*_*ank 2 c++ clang travis-ci c++14

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

按照此处的说明操作:

我写了以下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
Run Code Online (Sandbox Code Playgroud)

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

/home/travis/build/FrancoisChabot/abulafia/./include/abulafia/support/type_traits.h:20:12: 错误:命名空间“std”中没有名为“decay_t”的成员;您指的是 'decay' 吗?

/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1725:11: 注意: 'decay' 声明这里

使用以下命令编译时:

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

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

链接到完整日志如果有重要的东西我省略了。

谢谢!

Chr*_*eck 5

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

看到我很久以前打开的一个问题

如果你需要一个libstdc++带有 travis-ci的 C++14 ,你应该使用 docker 并制作一个更新的 ubuntu 镜像。这是AFAIK的最佳解决方法。