一、linux下的安装和使用
1.安装
下载源程序包 ,解压,运行以下三条命令
- ./configure
- make
- make install
./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
echo /usr/local/lib > /etc/ld.so.conf.d/local.conf /sbin/ldconfig
另外,如下配置命令可以让python版本的gdal在make时安装:
./configure --with-python
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
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