繁体   English   中英

C ++ 17代码没有使用Clang-6.0编译Travis

[英]C++17 code not compiling on Travis with Clang-6.0

我一直在努力将我们的代码库迁移到C ++ 17,现在已经在本地使用g ++和clang了。

但是,我正在使用Clang 6.0和Clang 5.0对Travis进行编译失败,这两者都应该支持C ++ 17。

此外,使用Clang 6.0在我的机器上编译相同的代码也是成功的。

失败的相关代码是通过大括号初始化返回元组,例如:

return {str.str(), key};

我得到的具体错误信息是:

/home/travis/build/turtlecoin/turtlecoin/src/Mnemonics/Mnemonics.cpp:51:20: error: chosen constructor is explicit in copy-initialization
            return {str.str(), key};
                   ^~~~~~~~~~~~~~~~ /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/tuple:539:19: note: explicit constructor declared here
        constexpr tuple(_U1&& __a1, _U2&& __a2)

似乎按预期使用了clang-6.0:

-- Check for working C compiler: /usr/bin/clang-6.0
-- Check for working C compiler: /usr/bin/clang-6.0 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/clang++-6.0
-- Check for working CXX compiler: /usr/bin/clang++-6.0 -- works

我当地的铿锵工作正常:

clang version 6.0.1 (tags/RELEASE_601/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

这是特拉维斯的问题吗? 铛? 我的代码?

如果有帮助,完整的构建日志就在这里: https//travis-ci.org/turtlecoin/turtlecoin/jobs/437857481

编辑:忘记提及 - 我在我的CMakeLists中使用标志启用C ++ 17模式:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

谢谢。

正如@Yakk - Adam Nevraumont所说,这是由于libstdc ++不是最新的。 我们可以通过安装更新​​的解决方案。

由于Travis使用Ubuntu 14.04,我们可以从ubuntu-toolchain-r-test PPA获得libstdc++-7-dev

在你的travis配置中:

- os: linux
    compiler: clang
    addons:
      apt:
        sources:
        - ubuntu-toolchain-r-test
        - llvm-toolchain-trusty-6.0
        packages: 
          - clang-6.0
          - libstdc++-7-dev
    env:
    - MATRIX_EVAL="CC=clang-6.0 && CXX=clang++-6.0"

您正在使用的编译器和标准库是两个连接但不完全相同的东西。

赔率是您的本地标准库与远程标准库不同。

它可能是libc ++ vs libstdc ++标准库的不同,或者Travis标准库可能是某种方式的数据。

C ++ 17中的一个新特性是有条件显式的元组构造。 所以一个稍微过时/不太一致的std库会给你这个错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM