`
cryolite
  • 浏览: 580316 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

gdal安装和使用

    博客分类:
  • GDAL
阅读更多

一、linux下的安装和使用

1.安装

下载源程序包 ,解压,运行以下三条命令

./configure
make
make install


在/usr/local/lib目录下会出现编译好了的相关gdal库,我用的redhat linux下的一个问题是/usr/local/lib目录不在库的查找路径中,因此链接时会出现找不到gdal库的问题。有人认为这是redhat的一个bug ,但redhat解释是故意这样做的,他们建议开发人员可以自行添加该路径到库搜索目录中:

echo /usr/local/lib > /etc/ld.so.conf.d/local.conf

/sbin/ldconfig

 

 

另外,如下配置命令可以让python版本的gdal在make时安装:

 

./configure --with-python

如果出现错误:

 

extensions/gdal_wrap.cpp: error: Python.h: No such file or directory

这是没有python-dev的缘故,参考本文末尾。

 

2.使用

2.1 gdal库连接问题

在我用的RetHat linux上gdal成功安装后,相关的库也会拷贝到/usr/local/lib目录下(注意这个目录不是系统的默认加载路径,所以系统不知道在哪里加载libgdal.so库),需要指定库路径:让程序在运行时能找到这些库

运行时如果出现以下错误:

 error while loading shared libraries: libgdal.so.1: cannot open shared object file: No such file or directory

说明系统不知道gdal共享库加载路径,运行 ldd命令 列出程序正常运行所需要的共享库

ldd test.o

[root@test]# ldd a.out
        /usr/lib/libcwait.so (0x0054f000)
        libgdal.so.1 => not found
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00b42000)
        libm.so.6 => /lib/tls/libm.so.6 (0x009b5000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00b03000)
        libc.so.6 => /lib/tls/libc.so.6 (0x0088a000)
        /lib/ld-linux.so.2 (0x00871000)
解决办法如下

a. 设置环境变量:

设置$LD_LIBRARY_PATH=库所在目录(多个目录用:分隔),系统加载工具将顺序搜索变量指定的目录

LD_LIBRARY_PATH=/usr/local/lib:/usr/local/erlang/lib; export LD_LIBRARY_PATH

b.  以root身份把库路径加入/etc/ld.so.conf

vim /etc/ld.so.conf.d/gdal.conf

在此文件中增加如下路径

/usr/local/gdal-1.5.1/.libs

然后运行ldconfig更新/etc/ld.so.cache
/sbin/ldconfig

c.

直接把gdal相关的库拷贝到/usr/lib下

共享库搜索顺序一般是$LDLIBRARY_PATH,/etc/ld.so.cache, /usr/lib, /lib

参考:Linux编程使用库

2.2 编译使用GDAL库的C++程序

运行以下命令

g++ test.cpp -lgdal -o test.o 

 

 

二、Mac OS X下的安装与使用

 

1. 从源代码直接编译安装

下载源代码后 ./configure & make & sudo mak install

对于32位的老mac以上就可以了,

 

对于64位的mac,如果用上述命令编译安装只会生成64位的动态库和相关gdal程序。可以通过如下命令configure后再编译安装

./configure CFLAGS="-arch i386 -arch x86_64" CXXFLAGS="-arch i386 -arch x86_64" LDFLAGS="-arch i386 -arch x86_64"  --disable-dependency-tracking

 

这样就会生成同时支持32位和64位的动态链接库了。

参考这里:

 

[1] http://www.kyngchaos.com/macosx/build/gdal

[2] http://www.mail-archive.com/libtool@gnu.org/msg12306.html

 

2. dmg安装

William Kyngesburye维护了一个GDAL的Mac OS X framework .

按指示安装即可,卸载的话直接将/Library/Framework/GDAL.framework, /Library/Application Support/GDAL,~/Library/Application Support/GDAL 扔到废纸篓里

2.1

 

安装成功后,安装目录(/Library/Frameworks/GDAL.framework/)下是没有Libraries目录的。

如果我们的程序要以共享库的方式使用,则需要在安装目录(/Library/Frameworks/GDAL.framework/)下加一个符号连接:

 

cd /Library/Frameworks/GDAL.framework/
sudo ln -s Versions/Current/Libraries/ Libraries

这样就可以在Mac下创建我们自己的使用GDAL的共享库了  

 

2.2 对Python的支持

安装成功后,在安装目录/Library/Frameworks/GDAL.framework下有Versions/1.6/Python,gdal的python库就位于这个目录的site-packages中。

安装程序会在/Library/Python/2.5/site-packages目录下增加一个gdal.pth文件,该文件中指定了上述gdal的python库位置所在。

安装Python2.6后,因为安装程序不会自动为2.6指定gdal的安装路径,要想中2.6中使用gdal库,需要在Python 2.6的安装目录的site-packages中加入上述gdal.pth文件才行

3.使用

编译使用GDAL库的可执行C++程序:

g++ gdal_test.cpp -framework GDAL
 -o gdal_test.o

 

编译生成使用GDAL库的共享库的C程序:(gcc 4.2.1)

 

gcc -o GDAL_drv.so \
-fpic -shared -flat_namespace -undefined suppress -fno-common \
GDAL_drv.c spectrometer.c \
 -framework GDAL

 

 

注意

 C/C++程序中的include一律要加上GDAL/,例如 

 

#include "GDAL/ogrsf_frmts.h"

 

三、跨平台编译

3.1 源代码中的处理

使用预处理器的技巧区分处理平台的不同,在不同的平台上会定义一些宏以表述编译的OS平台,例如:

在Mac OS平台下会预定义一个宏__APPLE__

在Linux下会预定义宏 __linux__

在FreeBSD下有 __FreeBSD__

在Unix下都会定义有宏 __unix__

 

甚至不同处理器也有宏对应,例如

__i386__ 和 __X86_64__对应着着 Linux x86

__ia64__对应着 Linux IA64

 

更多的参见: http://dev.csdn.net/article/63/63391.shtm

 

一个例子:

#ifdef __APPLE__
	#include "GDAL/ogrsf_frmts.h"
#elif defined(__linux__)
	#include "ogrsf_frmts.h"
#endif

 

在Mac下编译

g++  -framework GDAL test.cpp -o test.o

 

 

在linux下编译方式不变

 

g++ test.cpp -lgdal -o test.o

 

3.2 构建工具中的处理

有时候不同平台有不同的编译命令,因此makefile区别对待。例如编译链接共享文件对象(shared object)的命令参数在linux下和MaxOSX下是不同的,可以用uname -s的shell命令区别平台

myos := $(shell uname -s)
ifeq ($(myos),Linux)
CFLAGS = -shared
else
CFLAGS = -bundle -undefined suppress -flat_namespace
endif

gcc -std=c99 -fPIC $(CFLAGS) -o $@ $<

 

 

四、其它问题

1. geos的支持

geos库是JTS的C/C++版,要进行几何操作的话需要安装geos库,geos库必须在gdal之前安装

正确安装geos库后,在gdal的confiugre完成后会看到:

GEOS support: yes

 

2. 支持python的gdal

配置时加上--with-python参数即可:

./configure --with-python

 

如果出现如下错误:

 

error: Python.h: No such file or directory

这是没有安装python-dev的原因

 

首先,检查python版本

$ python -V

Python 2.7.2+

 

根据版本选择要安装python-dev:

$ sudo apt-get install python2.7-dev

 

最好安装 numpy

sudo apt-get install python-numpy

 

otherwise:

import _gdal 
ImportError: No module named _gdal

 

 

从源码安装python:

下载源码,configure->make->make install后,运行python -V查看

 

需要指定gdal库的位置,如前,必要时执行ldconfig

在gdal的swig/python目录下运行

python setup.py build

python setup.py install

 

检查模块是否正确安装

pyhon环境中运行

 

from osgeo import ogr

 

3. 64位linux下build如果出现如下错误

/usr/lib/libexpat.so: could not read symbols: File in wrong format

是说expat是32位的不能在64位机器上,可以修改configure生成的GDALmake.opt指向正确的文件,或者confiugre时指定不要expat,但这样就不支持KML和GPX了

 

可采用使用自带的expat来编译,  配置时加上如下参数:

./configure --with-expat=buildin

 

 

 

 

4. HDF4的支持:从源代码编译安装HDF4

 

4.1 前提

在ubuntu中编译hdf4的时候需要yacc和flex

 

如果configure时出现错误:

cannot find yacc utility

要安装byacc

sudo apt-get install byacc

 

 

4.2 HDF4需要安装第三方支持库:szip jpeg 等

 

策略是将这些都安装在/usr/local下,在hdf安装配置时指定(--prefix=...)这些第三方库的安装路径,在gdal安装配置时指定hdf的安装路径

 

4.2.1 szip库的安装

可以选择szip库的支持,make安装szip时,缺省是安装在当前szip源文件目录下的,所以最好指定安装路径:

./configure --prefix=/usr/local/szip-2.1

 

 

4.2.2 jpeg第三方库的安装

http://www.hdfgroup.org/ftp/lib-external/jpeg/src/jpegsrc.v6b.tar.gz

 

 

./configure --prefix=/usr/local/jpeg6b --enable-shared --enable-static

 

查了一下,似乎这个jpeg库源代码是1998年发布的。在编译安装时有可能会遇到如下两个问题:
1) libtool的问题

在64位环境中make的时候会出现libtool错误,可以apt-get 安装libtool,然后在安装目录下建立一个到libtool的软链接:

ln -s `which libtool` libtool

这样就可以make了

 

2) 手工创建目标目录

但是在make install之前,还要先手工建好以下目录

sudo mkdir -p /usr/local/jpeg6b/bin  /usr/local/jpeg6b/include /usr/local/jpeg6b/lib /usr/local/jpeg6b/man/man1 

 

sudo make install

 

 

4.2.3 zlib库的安装

一般系统都自带了这个库,不过版本较低(1.2.3)。如果坚持安装最好自定义安装路径:

./configure --prefix=/usr/local/zlib-1.2.5

make 

sudo make install

 

如果不指定prefix,有可能override系统自带的zlib,导致某些其它应用不能正常使用。好在zlib源代码提供了一个卸载选项:

sudo make uninstall

 

 

4.3 hdf4的编译安装

需要指定安装目标路径(prefix)。不然就装在当前目录下了。

 

./configure --prefix=/usr/local/hdf-4.2.7 --with-jpeg=/usr/local/jpeg6b --with-szlib=/usr/local/szip-2.1 --enable-shared=yes --enable-static=yes --disable-fortran

 

或者,坚持使用zlib-1.2.5的话

./configure --prefix=/usr/local/hdf-4.2.7 --with-jpeg=/usr/local/jpeg6b --with-szlib=/usr/local/szip-2.1 --with-zlib=/usr/local/zlib-1.2.5 --enable-shared=yes --enable-static=yes --disable-fortran

 

make 

sudo make install

 

将HDF4库配置安装在/usr/local/hdf-4.2.7目录下

 

4.4 gdal的编译安装

./configure --with-python --with-hdf4=/usr/local/hdf-4.2.7

 

make 

sudo make install

 

参考:

http://www.cnblogs.com/yeahgis/articles/2446336.html

http://www.hdfgroup.org/release4/obtain.html

 

 

分享到:
评论

相关推荐

    GDAL安装与使用

    ### GDAL 安装与使用详解 ...通过上述步骤,可以顺利完成 GDAL 的安装和基本使用的测试。GDAL 是一个非常强大的工具库,广泛应用于地理信息系统 (GIS) 开发中。了解其安装和使用方法对于 GIS 开发者来说是非常重要的。

    windows下 gdal安装并集成FIleGDB

    windows下 gdal安装并集成FIleGDB ,全成跟着文档来操作即可

    gdal安装与工程配置

    ### GDAL安装与工程配置详解 #### 一、前言 GDAL(Geospatial Data Abstraction Library)是一个用于处理地理空间数据的强大开源库。它支持多种格式的数据读写操作,并提供了一系列工具来处理这些数据。本文将详细...

    GDAL 1.4.2 安装文档

    编译完成之后,还需要打开C:\gdalsrc\nmake.opt文件,根据自己的机器环境设置GDAL_HOME变量,该变量指向了GDAL安装的目标目录,如C:\GDAL。 接下来,使用nmake命令执行安装,包括makefile.vcinstall和makefile....

    ubuntu下java可用的gdal库及使用示例代码

    首先,你需要安装GDAL的源代码,并在Ubuntu 10.04上配置、编译和安装。这个过程中可能需要用到诸如`autotools`、`libgeotiff`、`proj`等依赖库。接着,由于GDAL原生并不支持Java,所以要用到SWIG(Simplified ...

    python及gdal安装说明和问题解决方法

    ### Python及GDAL安装说明与问题解决方法 #### 一、环境准备与注意事项 在开始安装之前,确保您的计算机上已经没有安装过Python、GDAL等相关软件,因为这些软件的不同版本之间可能存在32位和64位的冲突。无论是32...

    GDAL在Linux下的编译实现

    在配置完成后,可以使用 make 命令来编译 GDAL,最后使用 make install 命令来安装 GDAL。安装完成后,GDAL 的默认安装路径为 /usr/local/lib。 2. GDAL 编译 在编译 GDAL 之前,需要先配置 java.opt 文件,将其...

    VS2013软件GDAL库安装

    在Visual Studio 2013环境下配置GDAL,以便在C++项目中使用,是开发者必须掌握的一项技能。 一、GDAL库下载与解压 首先,你需要从GDAL的官方网站或者其他可靠的源下载GDAL的预编译版本,通常是适用于Windows的GDAL ...

    GDAL库介绍、安装与使用介绍

    GDAL 库介绍、安装与使用介绍 GDAL(Geospatial Data Abstraction Library)是一种转换各种栅格数据格式的库,能够...但是,需要注意的是,GDAL 的安装和使用需要有一定的技术基础和经验,否则可能会出现一些问题。

    GDAL在VS2008 C#中的编译、安装和使用

    GDAL 在 VS2008 C# 中的编译、安装和使用 GDAL(Geospatial Data Abstraction Library)是一种开放源代码的空间数据处理库,它可以对多种空间数据格式进行读写操作。GDAL 库提供了一个统一的接口来访问和操作不同...

    gdal入门使用测试程序

    确保在安装时同时安装了Python绑定,因为我们将使用Python语言来演示GDAL的使用。 ### 2. 导入GDAL模块 在Python环境中,我们需要导入GDAL库。GDAL在Python中的接口是`osgeo`模块下的`gdal`子模块: ```python ...

    Python2.7 GDAL(win7 64位平台)之安装

    在安装 GDAL 之前,需要安装 Visual Studio 2010 和 GEOS 3.3.8。这两者都是 GDAL 的依赖项。同时,需要安装 Python 2.7,以便在 Python 环境下使用 GDAL。 二、安装心得 安装 GDAL 有两种方案可供选择: 1. 利用...

    GDAL详细安装教程

    7. 安装编译结果:编译成功后,通过运行“nmake /f makefile.vc install”和“nmake /f makefile.vc devinstall”将GDAL库安装到目标文件夹,生成必要的库文件和头文件。 8. 编译C#源代码:进入"C:\gdal-1.5.0\swig...

    Linux配置Java版gdal环境离线包

    - 然后安装GDAL的核心库,这通常可以通过包管理器完成,如在Ubuntu上使用:`sudo apt-get install gdal-bin libgdal-dev` - 如果提供的离线包包含GDAL库文件,你需要将它们解压到合适的目录,例如 `/usr/local/`,...

    GDAL介绍与使用心得

    在使用GDAL时,应该注意库的安装和配置,特别是在不同的操作系统和开发环境中。由于GDAL是C++编写的,因此在非C++语言中使用GDAL时,可能需要借助SWIG等工具生成对应语言的绑定。此外,GDAL的抽象数据模型包含了丰富...

    Python GDAL安装依赖包

    GDAL下载版本为3.4.3,含有python3.9两个版本的安装包。安装适合自己需求可以访问链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-ldap下载对应安装包;

    java配置GDAL库的大坑

    GDAL 库是一个开源的地理信息系统(GIS)库,提供了对栅格和矢量数据的支持。在 Java 中使用 GDAL 库需要将其配置到 Java 项目中,但是在配置过程中容易遇到版本不一致的问题。 GDAL 版本不一致的原因 GDAL 库有多...

    gdal库的安装文件whl.zip

    GDAL(Geospatial Data Abstraction Library)是一个开源的地理空间数据处理库,它支持多种地理空间文件格式...通过本地的.whl文件,我们可以快速便捷地在Python环境中安装和使用GDAL,从而高效地处理和分析地理数据。

    gdal-3.8.0.tar.gz

    有很多著名的GIS类产品都使用了GDAL/OGR库,包括ESRI的ARCGIS 9.3,Google Earth和跨平台的GRASS GIS系统。利用GDAL/OGR库,可以使基于Linux的地理空间数据管理系统提供对矢量和栅格文件数据的支持。

    centos7编译安装gdal所需文件

    gdal在linux上安装需要的文件比较多,附件包含gdal2.2.3及依赖的文件: proj-4.9.3.tar.gz geos-3.6.2.tar.gz jpegsrc.v9b.tar.gz hdf-4.2.13.tar.gz hdf5-1.10.1.tar.gz netcdf-4.4.1.tar.gz gdal-2.2.3.tar....

Global site tag (gtag.js) - Google Analytics