【问题标题】:Unsupported protocol while download tar.gz package下载 tar.gz 包时不支持的协议
【发布时间】:2015-07-01 05:31:46
【问题描述】:

我刚刚将我的 CMake 从 2.8 版本升级到 3.2。

它在 CMake 2.8 中就像一个魅力,但在升级后,它失败了。

我正在尝试使用ExternalProject_Add() CMake 函数构建第三方库。

ExternalProject_Add(
  luacov
  URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
  DOWNLOAD_DIR ${EXTERNAL_PROJECT_DOWNLOAD_DIR}
  CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE}
  SOURCE_DIR ${EXTERNAL_PROJECT_SRC_DIR}/luacov
  BINARY_DIR ${EXTERNAL_PROJECT_BUILD_DIR}/luacov
  UPDATE_COMMAND ""
  PATCH_COMMAND ""
)

我的观察:

  1. 使用GIT_REPOSITORY选项,ExternalProject_Add()允许httphttps协议下载外部项目。
  2. 使用URL选项,ExternalProject_Add()只允许http,但不允许https协议下载外部项目。

问题:

有没有办法使用https 协议下载和构建外部项目?

错误:

[ 16%] Performing download step (download, verify and extract) for 'luacov'
-- downloading...
 src='https://github.com/keplerproject/luacov/archive/v0.7.tar.gz'
 dst='/home/build/my_build/external_projects/downloads/v0.7.tar.gz'
 timeout='none'
CMake Error at /home/build/my_build/luacov-prefix/src/luacov-stamp/download-luacov.cmake:21 (message):
 error: downloading
'https://github.com/keplerproject/luacov/archive/v0.7.tar.gz' failed

status_code: 1
status_string: "Unsupported protocol"
log: Protocol "https" not supported or disabled in libcurl

Closing connection -1

make[3]: *** [luacov-prefix/src/luacov-stamp/luacov-download] Error 1
make[2]: *** [CMakeFiles/luacov.dir/all] Error 2
make[1]: *** [CMakeFiles/luacov.dir/rule] Error 2
make: *** [luacov] Error 2

【问题讨论】:

    标签: linux build download cmake


    【解决方案1】:

    问题可能是 CMake 附带的 CURL 库默认情况下不支持 SSL。我必须编译 cmake:

    ./bootstrap --system-curl
    make
    sudo make install
    

    ...这很有效,因为我的系统的 curl 支持 SSL。

    【讨论】:

      【解决方案2】:

      它对我有用的是:

      1. 更新 openssl

        sudo apt-get install openssl libssl-dev
        
      2. 修改引导文件以启用 CMAKE_USE_OPENSSL。将此line 替换为:

        cmake_options="-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON"
        
      3. 在cmake文件夹中正常运行引导脚本

        /@path_to_cmake/bootstrap
        

      【讨论】:

      • 行号已过期。现在是哪一行?
      • 如果行号不匹配,则在文件中搜索cmake_options
      • 安装libssl-dev 对我来说就足够了。 (Ubuntu 16.04) 安装 OpenSSL 和 libssl-div 后,CMake 将支持 SSL。无需编辑引导文件或在命令行手动为其提供参数。
      • 不要修改引导源代码,而是使用bootstrap --init 选项。示例:echo "SET(CMAKE_USE_OPENSSL CACHE BOOL ON FORCE)" > CMAKE_USE_SSL_ON.cmake && ./bootstrap --init=CMAKE_USE_SSL_ON.cmake
      【解决方案3】:

      在我的ExternalProject_Add() 中,我使用了GIT_REPOSITORY insted of URL 选项。

      #URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
      GIT_REPOSITORY https://github.com/keplerproject/luacov.git
      

      luacov下载并构建成功。

      对于任何https 协议,请使用ExternalProject_Add() 函数的DOWNLOAD_COMMAND 选项。

      DOWNLOAD_COMMAND wget https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
      

      它按预期工作。

      谢谢。

      【讨论】:

      • 使用DOWNLOAD_COMMAND时如何解压存档?当通过 URL 下载时,这是自动完成的,但当你这样做时,情况似乎并非如此。
      【解决方案4】:

      我在 CMake 不支持 https 协议的计算机中构建库时遇到了同样的问题。

      我必须按照@dekkard 的评论建议使用 -DCMAKE_USE_OPENSSL=ON 选项自己构建 cmake。

      【讨论】:

        【解决方案5】:

        对于 CMake 3.8.0,这对我有用:

        1. 安装/更新 openssl:

          yum install openssl openssl-devel
          
        2. 根据 Brad King 的 CMake forum reply 改编解决方案:

          ./configure --prefix=/software/cmake-3.8.0/ --parallel=${NPROC} -- \ 
              -/DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_USE_OPENSSL:BOOL=ON
          make -j ${NPROC} 
          make install
          
        3. 享受吧!

        【讨论】:

        • 感谢您的回复。 +1 其他选项。
        【解决方案6】:

        看起来与 Cmake 3.2.1 一样,它可以按预期工作。

        这是我的示例项目/CMakeLists.txt:

        PROJECT(TestDownload)
        
        SET(CMAKE_CXX_COMPILER "/path/to/bin/g++")
        SET(CMAKE_C_COMPILER "/path/to/bin/gcc")
        
        SET(CMAKE_CXX_FLAGS "")
        SET(CMAKE_C_FLAGS "")
        
        cmake_minimum_required(VERSION 3.2)
        include(ExternalProject)
        
        ExternalProject_Add(
          luacov
          URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
          DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/luacov
          UPDATE_COMMAND ""
          PATCH_COMMAND ""
          INSTALL_COMMAND ""
        )
        

        还有命令:

        $ cd project
        $ mkdir build && cd build
        $ cmake ..
        ...
        $ make all
        Scanning dependencies of target luacov
        [ 12%] Creating directories for 'luacov'
        [ 25%] Performing download step (download, verify and extract) for 'luacov'
        -- downloading...
             src='https://github.com/keplerproject/luacov/archive/v0.7.tar.gz'
             dst='/tmp/project/build/luacov/v0.7.tar.gz'
             timeout='none'
        -- [download 7% complete]
        -- [download 21% complete]
        -- [download 76% complete]
        -- [download 100% complete]
        -- downloading... done
        -- verifying file...
             file='/tmp/project/build/luacov/v0.7.tar.gz'
        -- verifying file... warning: did not verify file - no URL_HASH specified?
        -- extracting...
             src='/tmp/project/build/luacov/v0.7.tar.gz'
             dst='/tmp/project/build/luacov-prefix/src/luacov'
        -- extracting... [tar xfz]
        -- extracting... [analysis]
        -- extracting... [rename]
        -- extracting... [clean up]
        -- extracting... done
        [ 37%] No patch step for 'luacov'
        [ 50%] No update step for 'luacov'
        ...
        

        【讨论】:

        • 感谢您的回复并 +1。我正在按照您在回复中提到的相同步骤进行操作。但仍然面临我在EDIT 标签下方的问题中更新的错误。
        • 嗯,那是另一回事。不知道这是否仍然是真的,但这是他们所说的(cmake.org/pipermail/cmake/2010-December/041295.html):CMake builds its own curl, without ssl support by default, unless you point it to the system curl. You can rebuild CMake with the CMAKE_USE_OPENSSL ON if you have all the right supporting system libraries installed.
        【解决方案7】:

        我通常只是将 url 从 https 修改为 http。

        【讨论】:

        • 这不是一个肮脏的解决方案,在很多情况下都不起作用,因为许多页面只能通过 HTTPS 访问。
        猜你喜欢
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 2011-11-02
        相关资源
        最近更新 更多