首页 > 代码库 > Linux下非root权限安装与使用GDAL库的方法

Linux下非root权限安装与使用GDAL库的方法

学习GDAL的话推荐两个网站。

GDAL的官方文档:www.gdal.org

李民录老师的博客:http://blog.csdn.net/liminlu0314/article/category/777646

下面进入正题。

笔者的系统为RHEL4。

建议Linux的使用者习惯非root权限的操作,这是一个好习惯,在工作中会很有帮助。

首先安装GDAL依赖库PROJ.4和GEOS。

PROJ.4是提供投影坐标系相关操作的库,GEOS是提供空间分析计算相关的库。都是开源的项目,可以自行Google最新的下载地址。

由于是非root权限,所以需要自行在~/local/目录下创建proj和geos目录(最好带上版本号)。然后将当前操作目录跳转到解压缩后的PROJ.4工程的根目录,如/.../proj-4.8.0。接下来进行源码安装三部曲。

./configure --prefix=/home/users/yourname/local/proj-4.8.0 --without-jnimakemake install

配置的时候注意一定要配置安装路径,由于没有root权限,如果直接安装会失败。而安装路径就是上面创建的目录。这里笔者的机器由于如果包含jni的话编译会报错,所以在配置的时候将其去掉了。原因可能是版本或者Java配置的问题。反正我是用C++来使用GDAL。这里就要多试一试了,如果可以直接编译成功,那就不需要后面的选项了。

然后是安装GEOS,同样的步骤。

./configure --prefix=/home/users/yourname/local/geos-3.4.2makemake install

安装完依赖库后,开始正式安装GDAL。

还是先跳转到解压后的工程根目录,然后进行三部曲。

./configure --prefix=/home/users/yourname/local/gdal-1.11.1 --with-geos=/home/users/yourname/local/geos-3.4.2/bin/geos-configmakemake install

这里解释一下,在执行完第一行语句后如果看到GEOS support: yes,则证明GDAL有了GEOS库的支持,否则GDAL库中一些功能将无法正常使用。

这里笔者的机器又出现了问题:无法编译通过。报了一个有关cpl_virtualmem.cpp的错误,通过一番查找发现系统的mremap函数的参数和这个文件中的不一致,所以手动修改源码。将cpl_virtualmem.cpp里面的宏定义(如下)注释掉即可。

#define HAVE_5ARGS_MREMAP

如果可以直接编译通过,可以无视上面的啰嗦。

这样安装的过程就基本完成,下面开始配置一些开发需要的环境。

由于GDAL对PROJ.4是动态加载的,所以要将PROJ.4的动态链接库路径加到变量LD_LIBRARY_PATH中,同时将GDAL的bin路径加到变量PATH中。

先用vim打开~/.bashrc文件,在末尾加上下面的代码。

export PATH=$PATH:/home/users/yourname/local/gdal-1.11.1/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/users/yourname/local/gdal-1.11.1/lib:/home/users/yourname/local/proj-4.8.0/lib

保存退出后,执行source ~/.bashrc才真正的更新了变量。

然后在命令行中输入gdalinfo回车,如果出现提示信息证明安装成功。

下面介绍一下用C++来调用GDAL库的方法。

首先,新建一个GDALTest.cpp文件,内容如下。

 1 #include "gdal.h" 2 #include "ogrsf_frmts.h" 3  4 int main(int argc,char * argv[]) 5 { 6     RegisterOGRTAB(); 7  8     OGRSFDriverRegistrar *registrar = OGRSFDriverRegistrar::GetRegistrar(); 9     int count =registrar->GetDriverCount();10     printf("Total: %d\n",count);11     for(int i=0;i<count;i++){12         printf("%s\n",registrar->GetDriver(i)->GetName());13     }14 15     return 0;16 }

这段代码的意思是输出OGR驱动。

然后进行编译。

g++ GDALTest.cpp -I ./ -I /home/users/yourname/local/gdal-1.11.1/include -L/home/users/yourname/local/gdal-1.11.1/lib -lgdal -o GDALTest

最后执行./GDALTest,如果看到正常的输出则说明成功。

Linux下非root权限安装与使用GDAL库的方法