现象
最近在用cmake编译Apache arrow时,竟然报了错:
排查过程
最开始在网上直接搜“Unsupported protocol”,查到的说是因为安装的curl不支持https,需要先使用如下命令查询curl支持的协议:
curl -V
然而查出来却是支持https的:
这就奇怪了,我的curl明明支持,怎么告诉我不支持呢?
加上了cmake关键词再搜索,终于在知乎上搜到一篇文章1指出,可能是由于cmake安装时出了问题。
然而我按文章中的办法重新编译了cmake依然报错。
最后终于在stackoverflow上找到了一篇文章2,解释是由于安装cmake时,编译出了问题:
在使用cmake源码编译安装时,如果不特殊指定,则会自己编译一个curl,而cmake自己编译的cmake是不支持https的。
结论
cmake编译安装出了问题,需要重新安装,并在安装时指定使用系统自带的curl。
以我使用的CentOS7为例,重新编译安装的过程如下:
- 首先安装依赖的curl和zlib:
sudo yum install -y curl-devel zlib-devel
注:这里需要使用devel版本。另外zlib是由于我安装时提醒需要。
- 之后进入cmake的编译目录,这里我是在源码中新建了一个build文件夹。
../bootstrap --prefix=/usr/local/cmake3.14.7 --system-curl
注:这里加了prefix是指定了安装的目录,方便我之后根据不同项目可以切换不同版本的cmake。
- 最后安装:
gmake -j8 && gmake install
至此重新编译Arrow,终于成功。
文章链接 ↩︎
文章链接 ↩︎