下载 tar.gz 程序包时协议不受支持
Unsupported protocol while download tar.gz package
我刚刚将我的 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 ""
)
我的观察:
- 使用
GIT_REPOSITORY
选项,ExternalProject_Add()
允许 http
和 https
协议下载外部项目。
- 使用
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
看起来与 Cmake 3.2.1 一样,它按预期工作。
这是我的示例 project/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'
...
在我的 ExternalProject_Add()
中,我使用了 GIT_REPOSITORY
而不是 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
它按预期工作。
谢谢。
我在 CMake 不支持 https 协议的计算机上构建库时遇到了同样的问题。
我必须按照@dekkard 的评论建议使用 -DCMAKE_USE_OPENSSL=ON 选项自己构建 cmake。
问题可能是 CMake 附带的 CURL 库在默认情况下不支持 SSL。我必须使用以下命令编译 cmake:
./bootstrap --system-curl
make
sudo make install
...这很有效,因为我的系统的 curl 支持 SSL。
它对我有用的是:
更新 openssl
sudo apt-get install openssl libssl-dev
修改 bootstrap 文件以启用 CMAKE_USE_OPENSSL。将此 line 替换为:
cmake_options="-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON"
运行 bootstrap 脚本通常在 cmake 文件夹中
/@path_to_cmake/bootstrap
对于 CMake 3.8.0 这对我有用:
Install/update openssl:
yum install openssl openssl-devel
采用 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
尽情享受吧!
我通常只是将 url 从 https 修改为 http。
我刚刚将我的 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 ""
)
我的观察:
- 使用
GIT_REPOSITORY
选项,ExternalProject_Add()
允许http
和https
协议下载外部项目。 - 使用
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
看起来与 Cmake 3.2.1 一样,它按预期工作。
这是我的示例 project/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'
...
在我的 ExternalProject_Add()
中,我使用了 GIT_REPOSITORY
而不是 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
它按预期工作。
谢谢。
我在 CMake 不支持 https 协议的计算机上构建库时遇到了同样的问题。
我必须按照@dekkard 的评论建议使用 -DCMAKE_USE_OPENSSL=ON 选项自己构建 cmake。
问题可能是 CMake 附带的 CURL 库在默认情况下不支持 SSL。我必须使用以下命令编译 cmake:
./bootstrap --system-curl
make
sudo make install
...这很有效,因为我的系统的 curl 支持 SSL。
它对我有用的是:
更新 openssl
sudo apt-get install openssl libssl-dev
修改 bootstrap 文件以启用 CMAKE_USE_OPENSSL。将此 line 替换为:
cmake_options="-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON"
运行 bootstrap 脚本通常在 cmake 文件夹中
/@path_to_cmake/bootstrap
对于 CMake 3.8.0 这对我有用:
Install/update openssl:
yum install openssl openssl-devel
采用 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
尽情享受吧!
我通常只是将 url 从 https 修改为 http。