linux安装postgis报错疑难杂症

第一次部署postgis差点安装到怀疑人生,弄了整整两个星期,过于丢人因此写个安装记录。

先说说自己的系统版本 cat /etc/os-release

NAME="OpenCloudOS" VERSION="8.10" ID="opencloudos" ID_LIKE="rhel fedora" VERSION_ID="8.10" PLATFORM_ID="platform:oc8" PRETTY_NAME="OpenCloudOS 8.10" 
ANSI_COLOR="0;31" CPE_NAME="cpe:/o:opencloudos:opencloudos:8" HOME_URL="https://www.opencloudos.org/" BUG_REPORT_URL="https://bugs.opencloudos.tech/"

最重要的第一步更新yum和安装仓库

腾讯云服务器的用这个网站云服务器 CentOS 环境下通过 YUM 安装软件-运维指南-文档中心-腾讯云 (tencent.com)

如果没有dnf的yum install dnf 试试,不行就用yum安装下面的东西

    # 启用 PowerTools 仓库
    sudo dnf install dnf-plugins-core
    sudo dnf config-manager --set-enabled powertools
    
    # 安装 EPEL 仓库
    sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
    
    # 验证 EPEL 仓库
    sudo dnf repolist
    

这些仓库配置文件在目录/etc/yum.repos.d下,如果手动添加后,刷新加载遇到报错直接把对应的文件删了就行。

这个是postgis的官方仓库可以手动添加,但是我会报错所以没法用这个安装。

[pgdg14]
name=PostgreSQL Global Development Group
baseurl=https://download.postgresql.org/pub/repos/yum/14/redhat/rhel-8-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG

[pgdg12]
name=PostgreSQL Global Development Group - 12
baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-8-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG

[pgdg13]
name=PostgreSQL Global Development Group - 13
baseurl=https://download.postgresql.org/pub/repos/yum/13/redhat/rhel-8-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG

如果能用这个安装成功那再好不过,不能就只能苦兮兮的用源码安装

仓库刷新命令

sudo dnf clean all && sudo dnf makecache


 

使用过的安装教程

Linux安装PostGresql_linux查看pg安装位置-CSDN博客

win、linux环境下JAVA+GDAL部署,jar包启动,相关描述,问题解决_no gdalalljni in java.library.path-CSDN博客

Postgresql 12.2 + PostGIS 3.0.1 安装部署_postgis安装教程-CSDN博客

检查PostGIS、PostgreSQL、GEOS、GDAL、PROJ等各软件的版本依赖关系_postgis版本对应关系-CSDN博客

PostgreSQL 12.5+ PostGIS3.0 + SFCGAL1.3的离线编译安装-CSDN博客

postgresql | 数据库 | centos7 完全离线安装postgresql12.5和postgis3.0插件教程_pg数据库下载-CSDN博客

PostGIS2.4服务器编译安装_postgis2.4.2-CSDN博客

一个查看各种版本是否兼容的网站

UsersWikiPostgreSQLPostGIS – PostGIS

准备工作差不多就是这些,直接说第一个遇到的问题,也是最重要的

问题1 在安装postgis后,往数据库添加postgis报错 libgeos_c.so.1: cannot open shared object file

意思是找不到这个文件,解决方法是复制粘贴即可

第一步

find / -name "libgeos_c.so.1" 2>/dev/null

搜索

第二步将/usr/local/lib目录下的那个直接复制粘贴,比如我的报错中说没有这个文件的目录是在/usr/local/pgsql/plugin/geos/lib,那么直接复制粘贴到这里,放心如果有其他报错直接删了就行。

如果你没有这个东西,可能是postgis安装有错误,检查一下或者重新安装

这个问题衍生出来的第二个问题是我弄了两个星期的罪魁祸首

问题2 添加libgeos_c.so.1的软连接后报错ERROR: could not load library "/home/postgres/lilb/postgis-3.so": /home/postgres/lib/postgis-3.so: undefined symbol.
GEOSCoverageSimplifyVW

这个软连接,我理解的意思是让程序访问libgeos_c.so.1时能转到我们希望他访问的文件

先放代码,删除现有的软链接

    sudo rm libgeos_c.so.1

 创建新的软链接,这个的意思是程序访问libgeos_c.so.1时能转到libgeos_c.so.1.10.2,就是因为这个才导致的错误

    sudo ln -s /usr/local/pgsql/plugin/geos/lib/libgeos_c.so.1.10.2 libgeos_c.so.1

我一开始以为是版本不兼容的问题,开始各种换版本,说多了都是泪,接下来遇到的问题就是安装gdal,geos,proj等遇到的问题,具体的细节感觉没必要说,因都是对那几个文件进行修改

安装postgis依赖的注意事项

1.在服务器根目录下有以下两个配置文件/etc/ld.so.conf,/etc/profile。

在安装依赖和postgis时就是从这里头检索需要的文件,贴上自己的以供参考。

 比如postgis安装报错说找不到gdal,checking for library containing GDALAllRegister... no configure: error: could not find GDAL。那就往这两个文件里添加安装目录,这个安装目录是填你自己的。

/usr/local/pgsql/plugin/gdal/lib

export GDAL_HOME=/usr/local/gdal
export GDAL_DATA=$GDAL_HOME/share/gdal

记得在修改这两个文件后需要进行刷新

修改 /etc/ld.so.conf 后刷新
sudo ldconfig
修改 /etc/profile 后刷新
source /etc/profile
        

因为我安装了很多个版本所以这个内容有点乱,仅以供参考,有些目录有$,比如$PKG_CONFIG_PATH,这个意思是调用自己,这样可以方便加注释

include ld.so.conf.d/*.conf

/home/postgres/lib
/usr/local/pgsql/plugin/gdal/lib
/usr/local/pgsql/plugin/geos/lib
/usr/local/pgsql/plugin/proj/lib
/home/postgres/share/extension
/home/postgres/data/usr/local/lib
/usr/local/pgsql/plugin/geos-3.12.2/lib
    
/usr/local/lib
/usr/local/lib64
# Set SQLite environment variables
export SQLITE3=/usr/local/sqlite
export PATH=$SQLITE3/bin:$PATH
export PKG_CONFIG_PATH=/usr/local/sqlite/lib/pkgconfig:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig:/usr/local/gdal/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/pgsql/plugin/proj/lib/pkgconfig:/usr/local/pgsql/plugin/gdal/lib/pkgconfig


# Set LD_LIBRARY_PATH for SQLite and other libraries
export LD_LIBRARY_PATH=/home/postgres/lib:/usr/local/lib:/usr/local/lib64:/usr/local/include:/usr/local/include/geos:/usr/local/pgsql/plugin/gdal-3.9.2/build:/usr/local/gdal/lib64:/usr/lib64:/usr/lib:/usr/local/pgsql/plugin


# Set Java environment variables
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH

# Set PostgreSQL environment variables
export PGHOME=/home/postgres
export PATH=$PGHOME/bin:$PATH
export PGDATA=/home/postgres/data

# Ensure all necessary paths are included in PATH
export PATH=$PATH:$PGHOME/bin:$PGDATA

# Set GDAL environment variables
# Uncomment the following lines if needed
export GDAL_HOME=/usr/local/gdal
export GDAL_DATA=$GDAL_HOME/share/gdal
export LD_LIBRARY_PATH=$GDAL_HOME/lib:$LD_LIBRARY_PATH
# export PATH=$GDAL_HOME/bin:$PATH
export PATH=$PATH:/usr/local/bin:/usr/local/gdal/bin

# Finalize PATH and LD_LIBRARY_PATH
export PATH
export LD_LIBRARY_PATH

# Set CPPFLAGS and LDFLAGS for GEOS
#export CPPFLAGS="$CPPFLAGS -I/usr/local/include"
#export LDFLAGS="$LDFLAGS -L/usr/local/lib64"
export LDFLAGS="-L/usr/local/lib -L/usr/local/lib64 -L/usr/lib64 -L/usr/local/gdal/lib -L/usr/local/gdal/lib64 -L/usr/local/pgsql/plugin/proj/lib -L/usr/local/pgsql/plugin/gdal/lib" 
export CPPFLAGS="-I/usr/local/include -I/usr/include -I/usr/local/gdal/include -I/usr/local/pgsql/plugin/proj/include -I/usr/local/pgsql/plugin/gdal/include"

 2.查看postgis安装日志寻找缺少文件

这个目的是看看除了给的报错外,到底缺少什么文件,查询命令

 grep -i "needed by" config.log

这个意思是查询关键词needed by,这个关键词后面跟着的往往就是缺少的文件,比如/usr/bin/ld: warning: libpq.so.5, needed by /usr/lib64/libgdal.so, not found。这个意思不一定是整个服务器里都没有,而且在这个目录下找不到,所以使用查找命令让后复制粘贴

find / -name 'libhdf5.so.6'

也可以试试这个,有更具体的报错grep -i "error" config.log
 

3.安装报错-fPIC

_ZTVN4geos5index8quadtree4NodeE' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: /usr/local/lib/libgeos.a(lt1-Key.o): relocation R_X86_64_32 against.bss' can not be used when making a shared object; recompile with -fPIC 
/usr/bin/ld: final link failed: Nonrepresentable section on output collect2: error: ld returned 1 exit status 
make[1]: *** [GNUmakefile:56: libgdal.la] Error 1 
make[1]: Leaving directory '/usr/local/pgsql/plugin/gdal-2.1.2' make: *** [GNUmakefile:65: check-lib] Error 2

这个错误信息表明在编译 GDAL 时遇到了与 libgeos.a 静态库相关的链接问题。具体来说,静态库中的某些对象文件没有使用 -fPIC(Position-Independent Code)编译,因此无法用于构建共享对象(即 .so 文件)。为了解决这个问题,需要确保 GEOS 库是以 -fPIC 方式编译的。(通义灵码ai给的解答)

重新安装一遍即可,非gdal的其他同理,记得先make clean把之前的给清空

    ./configure --enable-pic
    make
    sudo make install
    

4.报错找不到geo.pc

[root@VM-12-10-opencloudos geos-3.6.2]# find /usr/local/lib/pkgconfig /usr/lib/pkgconfig -name "geo.pc" find: ‘/usr/lib/pkgconfig’: No such file or directory [root@VM-12-10-opencloudos geos-3.6.2]#

第一步先确认这个文件存不存在   find / -name geos.pc 2>/dev/null

第二步确认有了之后你得让系统知道路径,修改/etc/profile,目录改成你自己的

   export PKG_CONFIG_PATH=/path/to:$PKG_CONFIG_PATH

改完记得刷新文件source /etc/profile。

geo.pc文件内容示例

prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib64

Name: GEOS
Description: Geometry Engine, Open Source - C API
Requires:
Version: 3.6.2
Cflags: -I${includedir}
Libs: -L${libdir} -lgeos_c
Libs.private: -lgeos -lstdc++ -lm

5.postgis安装报错proj4

Using user-specified proj directory: /usr/local/pgsql/plugin/proj checking for proj_api.h... yes 
checking for pj_get_release in -lproj... no
configure: error: could not find libproj - you may need to specify the directory of a PROJ.4 installation using --with-projdir

第一步确认libproj版本:    ls /usr/local/pgsql/plugin/proj/lib/
确认 proj_api.h 头文件:   ls /usr/local/pgsql/plugin/proj/include/proj_api.h
目录换成你自己的,如果没有看看是不是目录错了,实在找不到就重新安装

第二步创建必要的符号链接, 确保 libproj.so 指向正确的版本,以我自己为例

   sudo ln -s /usr/local/pgsql/plugin/proj/lib/libproj.so.15 /usr/local/pgsql/plugin/proj/lib/libproj.so
   sudo ln -s /usr/local/pgsql/plugin/proj/lib/libproj.so.15 /usr/local/pgsql/plugin/proj/lib/libproj.so.15
   

当然创软连接有可能会遇到这个错误说重复,不慌删了就是,然后重新创建

'/usr/local/pgsql/plugin/proj/lib/libproj.so.15': Too many levels of symbolic links [root@VM-12-10-opencloudos postgis-2.4.9]#

   sudo rm -f /usr/local/pgsql/plugin/proj/lib/libproj.so
   sudo rm -f /usr/local/pgsql/plugin/proj/lib/libproj.so.12
   sudo rm -f /usr/local/pgsql/plugin/proj/lib/libproj.so.12.0.0
   sudo rm -f /usr/local/pgsql/plugin/proj/lib/libproj.so.15
   

6总结

只要是在postgis安装时遇到说找不到什么什么的,第一个查看/etc/ld.so.conf,/etc/profile.看看这两个文件里有没有包含你安装的依赖,第二个就是看软连接有没有,列出符号连接的代码

   ls -l /usr/local/pgsql/plugin/proj/lib

能力有限也没有办法给很具体的解决办法,只能给一个解决的思路

### 回答1: 要在Linux安装PostGIS,您可以按照以下步骤操作: 1. 确保您的Linux系统已经安装PostgreSQL数据库。如果没有,请先安装。 2. 打开终端并使用以下命令安装PostGIS: sudo apt-get install postgis 或者 sudo yum install postgis 3. 安装完成后,您需要在PostgreSQL数据库中创建一个PostGIS扩展。在终端中输入以下命令: psql -d your_database_name -c "CREATE EXTENSION postgis;" (请将“your_database_name”替换为您的数据库名称) 4. 现在,您已经成功安装PostGIS。您可以在PostgreSQL数据库中使用PostGIS功能了。 希望这可以帮助您安装PostGIS。 ### 回答2: PostGIS是一款基于开源的PostgreSQL关系数据库的空间数据库扩展,它提供了存储、查询和操作空间数据的能力,是GIS领域非常流行的工具之一。 在安装PostGIS之前,需要预先安装PostgreSQL数据库。具体步骤如下: 1. 下载PostgreSQL安装包,可以到官网下载对应版本的安装包。 2. 运行安装包,按照提示一步步安装,一般情况下默认安装即可。 3. 安装完成后,打开pgAdmin,连接到本地数据库(一般默认端口为5432),创建一个新的数据库。 4. 打开命令行窗口,输入以下命令安装PostGIS扩展: sudo apt-get update sudo apt-get install postgis 5. 安装完成后,进入PostgreSQL环境,将新创建的数据库升级为支持空间数据的模板数据库,输入以下命令: sudo -u postgres psql CREATE DATABASE my_spatial_db TEMPLATE template_postgis; 6. 将新创建的数据库设置为当前工作数据库,输入以下命令: \connect my_spatial_db 7. 验证PostGIS是否安装成功,输入以下命令: SELECT PostGIS_version(); 如果能够返回PostGIS版本号,则说明安装成功。 总的来说,安装PostGIS并不是一件特别复杂的事情,只需要安装PostgreSQL后又按照正确的方法进行安装即可。希望以上的步骤能够对您有所帮助。 ### 回答3: PostGIS是一个免费的开源空间地理信息系统,支持PostgreSQL数据库中的GIS查询和分析,它由许多模块组成。安装PostGIS涉及到很多步骤,本文将详细介绍如何在Linux安装PostGIS。 1. 安装PostgreSQL 首先需要在Linux安装PostgreSQL数据库。可以通过以下命令安装: ``` sudo apt-get install postgresql ``` 2. 安装PostGIS 有多种方法可以安装PostGIS,但是本文将介绍使用apt-get命令安装。首先需要添加PostGIS仓库,可以通过以下命令添加: ``` sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -sc)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' ``` 添加完仓库后,需要导入PGDG仓库密钥,可以通过以下命令导入: ``` wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - ``` 接着运行以下命令更新仓库并安装PostGIS: ``` sudo apt-get update sudo apt-get install postgis postgresql-12-postgis-2.5 ``` 3. 激活PostGIS扩展 现在,PostGIS已经在系统中安装成功,但是还需要激活PostGIS扩展。需要在要使用PostGIS数据库中执行以下命令: ``` CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; ``` 执行完毕后可以使用PostGIS进行GIS查询和空间分析。 总结 以上就是在Linux安装PostGIS的详细步骤。需要注意的是,PostGIS的版本需要和安装PostgreSQL数据库版本对应,才能正常使用。同时,PostGIS对于GIS数据处理和空间分析提供了很多便捷的功能,可以帮助用户更好地处理和分析空间数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值