首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Travis CI似乎读错了stdlib

Travis CI似乎读错了stdlib
EN

Stack Overflow用户
提问于 2017-09-26 03:33:47
回答 2查看 433关注 0票数 2

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

按照指示这里

我写了以下travis.yml

代码语言:javascript
复制
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:错误:命名空间‘std’中没有名为'decay_t‘的成员;您的意思是’衰减‘吗? /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:1725:11:注:“衰变”在此声明

使用以下命令编译时:

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的图书馆。这里有什么我不明白的吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-14 00:56:43

可以通过在clang旁边安装g++7来升级标准库来解决这个问题。相关的矩阵条目如下:

代码语言:javascript
复制
matrix:
  include:
    - os: linux
      addons:
        apt:
          sources:
            - llvm-toolchain-trusty-5.0
            - ubuntu-toolchain-r-test
          packages:
            - clang-5.0
            - g++-7
      env: MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0"

把这个换成OP的yaml应该就行了。注意:compiler: clang是超量的-它的效果被eval "${MATRIX_EVAL}"技巧所覆盖。

票数 0
EN

Stack Overflow用户

发布于 2017-09-26 04:00:46

是的,这是一个众所周知的问题,特拉维斯-词的建设环境。它是针对默认的ubuntu信任的libstdc++编译和链接的,这是gcc 4系列的stdlib,甚至不符合C++11。

请看我很久以前开的问题

如果您需要一个带有travis-ci的C++14 libstdc++,您应该使用docker并制作一个最近的ubuntu图像。这是AFAIK最好的解决办法。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46417416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档