前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >折腾了一天,终于把这个 R 包装上了

折腾了一天,终于把这个 R 包装上了

作者头像
章鱼猫先生
发布2023-09-06 09:12:20
3320
发布2023-09-06 09:12:20
举报
文章被收录于专栏:BioIT爱好者BioIT爱好者

事情起因于在推特看到关于ggVennDiagram这个 R 包教程的一条推文,想着去复现一下,于是开始去安装,不料安装过程中出现了sf这个依赖包始终安装不成功的一堆错误,于是有了这一篇文章,特此记录一下,也希望给遇到类似问题的小伙伴一个参考。

第一个错误

首先说明一下,我用的 R 版本是 4.3.0,Linux 系统是 Red Hat 6.5。 最开始安装sf这个 R 包遇到的第一个 error 是 GDAL/GEOS/Proj.4 版本不符合要求的提示。

于是,开始手动去安装 GDAL/GEOS/Proj.4,之所以选择基于普通用户手动去源码编译安装,主要一个原因是系统版本太老,第二出于安全考虑避免 root 带来的一系列麻烦。

一番折腾,把 gdal-2.2.3+geos-3.4.0+proj-4.9.1 都装好了,设置完 PATH+LD_LIBRARY_PATH 后,却悲催的出现类似这个的报错:https://github.com/r-spatial/sf/issues/678 —— 这是sf包的一个错误!

于是,问题变成了如何成功去安装sf包,或者说如何解决sfproj_conf_test.c:4:28: error: expected ')' before 'const' 安装错误。

sf 包依赖与解决

sf包的 https://github.com/r-spatial/sf#linux 中明确提到了这个包需要依赖 GDAL/GEOS/Proj.4,具体版本要求如下。

📢 For Unix-alikes, GDAL (>= 2.0.1), GEOS (>= 3.4.0) and Proj.4 (>= 4.8.0) are required.

后来经过一番的折腾尝试,才发现:

  1. gdal-2.2.3+geos-3.4.0+proj-4.9.1 出现类似这个的报错 —— proj_conf_test.c:4:28: error: expected ')' before 'const'!
  2. gdal-2.2.0+geos-3.4.0+proj-4.8.0 的组合可以解决以上遇到的问题!
  3. 手动源码安装的话,Proj.4 要先于 GDAL 安装,因为 GDAL 安装的时候需要指定 Proj.4 进行编译。

GEOS

  1. 要求 GEOS version >= 3.4.0;
代码语言:javascript
复制
export PATH=/Bioinfo/Pipeline/SoftWare/gcc-4.8.5/bin:$PATH
wget https://download.osgeo.org/geos/geos-3.4.0.tar.bz2
tar xvjf geos-3.4.0.tar.bz2 -C ../build/
cd ../build/geos-3.4.0
./configure --prefix=/Bioinfo/Pipeline/SoftWare/geos-3.4.0
make -j4 && make install

Proj.4

  1. 要求 Proj.4 (>= 4.8.0)
  2. Proj.4 要先于 GDAL 安装!!!
代码语言:javascript
复制
export PATH=/Bioinfo/Pipeline/SoftWare/gcc-4.8.5/bin:$PATH
wget https://download.osgeo.org/proj/proj-4.8.0.tar.gz
tar zvxf proj-4.8.0.tar.gz -C ../build/
cd ../build/proj-4.8.0/
./configure --prefix=/Bioinfo/Pipeline/SoftWare/proj-4.8.0
make -j4 && make install

GDAL

  1. 要求 GDAL version >= 2.0.1;记住一定要加 --with-static-proj4 进行编译,否则 https://github.com/r-spatial/sf/issues/678 这个问题没法解决!!
  2. 尝试了一下 gdal-2.2.3+proj-4.9.1 组合,好像有问题(configure: error: GDALAllRegister not found in libgdal);
  1. 但是 GDAL-2.2.0+proj-4.8.0 是可以的!
代码语言:javascript
复制
$enabledevtoolset4
wget http://download.osgeo.org/gdal/2.2.0/gdal-2.2.0.tar.gz
tar zvxf gdal-2.2.0.tar.gz -C ../build/
cd ../build/gdal-2.2.0
./configure --prefix=/Bioinfo/Pipeline/SoftWare/gdal-2.2.0 --with-static-proj4=/Bioinfo/Pipeline/SoftWare/proj-4.8.0/
make -j4 && make install

最终安装命令

代码语言:javascript
复制
export PATH=/Bioinfo/Pipeline/SoftWare/gdal-2.2.0/bin:/Bioinfo/Pipeline/SoftWare/geos-3.4.0/bin:/Bioinfo/Pipeline/SoftWare/proj-4.8.0/bin:$PATH
export LD_LIBRARY_PATH=/Bioinfo/Pipeline/SoftWare/gdal-2.2.0/lib:/Bioinfo/Pipeline/SoftWare/geos-3.4.0/lib:/Bioinfo/Pipeline/SoftWare/proj-4.8.0/lib:$LD_LIBRARY_PATH

出现 configure: error: libproj not found in standard or given locations. 异常,参考:https://github.com/r-spatial/sf/issues/1471 得到解决:

代码语言:javascript
复制
# configure: error: libproj not found in standard or given locations.
options("repos"=c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
install.packages('sf', configure.args='--with-gdal-config=/Bioinfo/Pipeline/SoftWare/gdal-2.2.0/bin/gdal-config --with-geos-config=/Bioinfo/Pipeline/SoftWare/geos-3.4.0/bin/geos-config --with-proj-include=/Bioinfo/Pipeline/SoftWare/proj-4.8.0/include --with-proj-lib=/Bioinfo/Pipeline/SoftWare/proj-4.8.0/lib', configure.vars='GDAL_DATA=/Bioinfo/Pipeline/SoftWare/gdal-2.2.0/share/gdal')

使用说明

安装完 ggVennDiagram 后,这个包可以直接library(ggVennDiagram)使用;但如果要使用sf包,则需要:

代码语言:javascript
复制
export LD_LIBRARY_PATH=/Bioinfo/Pipeline/SoftWare/gdal-2.2.0/lib:/Bioinfo/Pipeline/SoftWare/geos-3.4.0/lib:/Bioinfo/Pipeline/SoftWare/proj-4.8.0/lib:$LD_LIBRARY_PATH
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BioIT爱好者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一个错误
  • sf 包依赖与解决
    • GEOS
      • Proj.4
        • GDAL
          • 最终安装命令
          • 使用说明
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档