【问题标题】:using different libc++ versions on travis for clang在 travis for clang 上使用不同的 libc++ 版本
【发布时间】:2018-02-07 07:47:56
【问题描述】:

Travis 使用 Ubuntu Trusty,默认的 libc++ 版本是 svn199600。

但是,我想使用不同的(较新的)版本进行测试,就像我已经使用不同的 clang 版本一样。

我当前的.travis.yml 如下所示:

language: generic

dist: trusty
sudo: required

matrix:
    include:
    - env: CXX=g++-7 CC=gcc-7
      addons:
        apt:
          packages:
            - g++-7
          sources: &sources
            - ubuntu-toolchain-r-test
            - llvm-toolchain-precise
            - llvm-toolchain-precise-3.9
            - llvm-toolchain-precise-3.8
            - llvm-toolchain-precise-3.7
            - llvm-toolchain-precise-3.6
            - sourceline: 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-4.0 main'
              key_url: 'http://apt.llvm.org/llvm-snapshot.gpg.key'
    - env: CXX=g++-6 CC=gcc-6
      addons:
        apt:
          packages:
            - g++-6
          sources: *sources
    - env: CXX=g++-5 CC=gcc-5
      addons:
        apt:
          packages:
            - g++-5
          sources: *sources
    - env: CXX=g++-4.9 CC=gcc-4.9
      addons:
        apt:
          packages:
            - g++-4.9
          sources: *sources
    - env: CXX=clang++-4.0 CC=clang-4.0
      addons:
        apt:
          packages:
            - clang-4.0
            - libc++-dev
          sources: *sources
    - env: CXX=clang++-3.9 CC=clang-3.9
      addons:
        apt:
          packages:
            - clang-3.9
            - libc++-dev
          sources: *sources
    - env: CXX=clang++-3.8 CC=clang-3.8
      addons:
        apt:
          packages:
            - clang-3.8
            - libc++-dev
          sources: *sources
    - env: CXX=clang++-3.7 CC=clang-3.7
      addons:
        apt:
          packages:
            - clang-3.7
            - libc++-dev
          sources: *sources
    - env: CXX=clang++-3.6 CC=clang-3.6
      addons:
        apt:
          packages:
            - clang-3.6
            - libc++-dev
          sources: *sources

script:
    - ./build_and_test.sh

before_install:
    - ./before_install.sh

例如,用libc++-dev-3.9 替换libc++-dev 没有帮助(仍然使用旧的库版本),即使添加以下行:

- sourceline: 'deb-src http://apt.llvm.org/trusty/ llvm-toolchain-trusty-3.9 main'

我还尝试将以下内容添加到我的 before_install.sh 中但没有成功(仍然是旧库):

sudo apt-add-repository "deb http://llvm.org/apt/trusty/ llvm-toolchain-trusty-3.9 main"   
sudo apt-get update   
sudo apt-get install -y libc++-dev libc++-helpers libc++1 libc++abi-dev lldb-3.9

如何在不从源代码构建的情况下正确完成?

【问题讨论】:

  • “没有帮助”是什么意思?构建是否失败?它是否使用错误的库构建?无需先卸载libc++-dev,这对您在本地有效吗?
  • @kichik 感谢您的评论。问题是它仍然使用旧库构建。我相应地更新了我的问题。
  • 在您的 env: 行中,您可以提供 LDFLAGS="-L /path/to/libary" LDLIBS="-l :libc++-dev-3.9.so" 例如以在提供给 LDFLAGS 的路径中找到该 lib(假设它是一个 .so 文件,无论如何,因为我在LDLIBS 中的名称,它必须是确切的文件名,因此如果是静态链接的,它可能是 .a)。我个人不使用 travis,但是 env 行看起来像 makefile 的东西,并且上面的 vars 与 Makefiles 一起使用,所以希望它有效。
  • @strobelight 谢谢,我也试过这个,但没有任何改变。
  • 我认为这根本与 travis 无关。就像 strobelight 所说:您必须为构建脚本提供参数并确保它选择正确的库。如果您的构建脚本不使用 LDFLAGS LDLIBS 变量,您必须查看构建脚本并找出它们的名称,或者您必须添加它们。

标签: c++ makefile travis-ci apt-get libc++


【解决方案1】:

看起来如果不从源代码构建是不可能做到的。 range-v3 库使用 a script 正是这样做的。

我调整了我的travis.yml 也可以使用它:

language: generic

dist: trusty
sudo: required

matrix:
    include:
    - os: linux
      compiler: gcc
      env: GCC_VERSION=7
        - CC=gcc-7
        - CXX=g++-7
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-7']

    - os: linux
      compiler: gcc
      env: GCC_VERSION=6
        - CC=gcc-6
        - CXX=g++-6
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-6']

    - os: linux
      compiler: gcc
      env: GCC_VERSION=5
        - CC=gcc-5
        - CXX=g++-5
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-5']

    - os: linux
      compiler: clang
      env: CLANG_VERSION=5.0 LIBCXX=On
        - CC=clang-5.0
        - CXX=clang++-5.0
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-5.0']
          packages: ['clang-5.0', 'g++-6']

    - os: linux
      compiler: clang
      env: CLANG_VERSION=4.0 LIBCXX=On
        - CC=clang-4.0
        - CXX=clang++-4.0
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-4.0']
          packages: ['clang-4.0', 'g++-6']

    - os: linux
      compiler: clang
      env: CLANG_VERSION=3.9 LIBCXX=On
        - CC=clang-3.9
        - CXX=clang++-3.9
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-3.9']
          packages: ['clang-3.9', 'g++-6']

    - os: linux
      compiler: clang
      env: CLANG_VERSION=3.8 LIBCXX=On
        - CC=clang-3.8
        - CXX=clang++-3.8
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-trusty-3.8']
          packages: ['clang-3.8', 'g++-6']

before_install:
  - wget https://raw.githubusercontent.com/onqtam/doctest/master/doctest/doctest.h
  - sudo mv ./doctest.h /usr/local/include/doctest.h
  - |
    if [ -n "$GCC_VERSION" ]; then
      export CXX="g++-${GCC_VERSION}" CC="gcc-${GCC_VERSION}"
    fi
    if [ -n "$CLANG_VERSION" ]; then
      export CXX="clang++-${CLANG_VERSION}" CC="clang-${CLANG_VERSION}"
    fi
    if [ "$LIBCXX" == "On" ]; then
      sudo apt-get purge cmake
      sudo apt-get install cmake3
      cmake --version
      sudo CXX="$CXX" CC="$CC"
      sudo ./cmake/install_libcxx.sh
      export CXXFLAGS="-stdlib=libc++"
    fi

install:
  - mkdir -p build && cd build
  - cmake .. -DUNITTEST=ON

script:
  - which $CXX
  - $CXX --version
  - cmake --build . --target unittest --config Release -- -j4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多