`
cryolite
  • 浏览: 573222 次
  • 性别: 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

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics