我剛開始使用travis-CI,所以我很抱歉如果這是一個愚蠢或明顯的問題。Travis CI似乎是從錯誤的stdlib讀取
繼說明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
這將導致以下錯誤在鐺編譯:
/home/travis/build/FrancoisChabot/abulafia/./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/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的庫。我在這裏有什麼不瞭解的嗎?
link to the full log如果有什麼重要的我ommited。
謝謝!
但是我的gcc 7 build在C++ 17中工作正常,所以必須有一種方法來獲得正確的lib而不需要製作一個全新的docker鏡像。 – Frank
沒錯,你有gcc 7編譯器,並且你正在啓用C++ 17,但它正在從操作系統讀取'libstdC++'頭文件和所以文件,所以你會得到一個非常棒的C++ 17/C++ 03建立。它這樣做是因爲它知道你可能有一些外部依賴。任何來自apt-get和需要'libstdC++'的依賴將需要gcc-4系列'libstdC++',並且您將無法一次鏈接到兩個版本的'libstdC++'。如果你的項目有任何你使用'apt-get'滿足的依賴關係,你最好的選擇就是使用docker鏡像。 –
如果您從源代碼構建整個編譯器和標準庫,則可以在您的主目錄中配置編譯器以使用該版本的stdlib,並製作需要該版本stdlib的程序。但是你可以從ubuntu的ppa中得到的gcc-5不會那樣,因爲它對運行可靠的任何人都沒有用處。他們將被設置爲使用可靠的stdlib並在可靠的方面製作有用的程序。歸結起來,如果可靠版本的'libstdC++'不適合你,那麼你應該使用docker。 –