Linux系统编译安装GDAL库
Linux系统编译GDAL库操作系统:Ubuntu 20.04官网下载GDAL及其依赖库最新版本:gdal 3.3.2proj 8.1.1geos 3.9.1sqlite-autoconf-3360000官网说明:要构建 GDAL 3 或更高版本,您至少需要一个 C++11 兼容编译器,以及 PROJ 6 或更高版本。这只会为您提供一个缺少大量驱动程序的最小构建。有关其他可选依赖项,请参阅光栅驱动
Linux系统编译GDAL库
操作系统:Ubuntu 20.04
官网下载GDAL及其依赖库最新版本:
gdal 3.3.2
proj 8.1.1
geos 3.9.1
sqlite-autoconf-3360000
官网说明:要构建 GDAL 3 或更高版本,您至少需要一个 C++11 兼容编译器,以及 PROJ 6 或更高版本。这只会为您提供一个缺少大量驱动程序的最小构建。有关其他可选依赖项,请参阅光栅驱动程序和矢量驱动程序页面。
因此,GDAL库最小依赖安装就是PROJ库。
编译安装PROJ
解压进入PROJ目录,执行命令,若提示权限不够加sudo
./configure && make && make install
编译问题解决:
./configure 提示 configure: error: Please install sqlite3 binary.
解决上述问题通过以下命令:
apt-get install sqlite3 && apt-get install libsqlite3-dev
如果依然报错,采用源码安装,解压进入Sqlite目录,执行命令安装:
./configure && make && make install
./configure 提示 No package ‘libtiff-4’ found
apt-get install libtiff-dev
可能需要安装curl:
sudo apt-get install curl
编译并安装GEOS
解压进入GEOS目录,执行命令,若提示权限不够加sudo
./configure && make && make install
编译并安装GDAL
解压进入GDAL目录,执行命令,若提示权限不够加sudo
./configure && make && make install
提示:make时间很久
如果 ./configure 提示 configure: error: PROJ 6 symbols not found 改为使用以下命令:
./configure --with-proj=/usr/local
编译过程报错:
/gdal-3.1.1/.libs/libgdal.so: undefined reference to `sqlite3_column_origin_name'
/gdal-3.1.1/.libs/libgdal.so: undefined reference to `sqlite3_column_table_name'
具体做法是在源码文件夹下
cd ./sqlite-autoconf-3320300/sqlite3.c
添加#define SQLITE_ENABLE_COLUMN_METADATA 1
这行代码
#define SQLITE_CORE 1
#define SQLITE_AMALGAMATION 1
#ifndef SQLITE_PRIVATE
# define SQLITE_PRIVATE static
#endif
#define SQLITE_ENABLE_COLUMN_METADATA 1
/************** Begin file ctime.c *******************************************/
参考:https://www.cnblogs.com/xuanmanstein/p/13227545.html
按照默认位置安装成功后,会在/usr/local/include文件夹中产生一系列.h文件(cpl_config.h、gdal.h……),在/usr/local/lib文件夹中产生5个库文件,其中libgdal.a和libgdal.la为静态链接库,libgdal.so等为动态链接库。
配置环境变量
运行以下命令
vim ~/.bashrc
#写入以下内容:
export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
保存并退出后,执行以下命令更新变量:
source ~/.bashrc
验证是否安装成功
新建文件hello.cpp
#include <iostream>
#include "gdal.h"
using namespace std;
int main() {
cout << "Hello World!" << endl;
return 0;
}
执行以下命令即可成功输出
g++ hello.cpp -lgdal -o hello //c++编译,引用gdal库
./hello
成功输出“hello world”
参考:https://www.jianshu.com/p/529588db4fec
https://www.jianshu.com/p/a51d54e0c75c
https://blog.csdn.net/wusanchui/article/details/108316437
https://juejin.cn/post/6875970706745196558
https://www.jianshu.com/p/0925a1ea6a8b
https://blog.csdn.net/gispipi/article/details/108140754
更多推荐
所有评论(0)