我想开发一个小程序,检查来自shapefile的哪些多边形与给定的矩形相交。该程序将在网站中使用(通过PHP的exec()
命令)。问题是,由于我未知的原因,我的网络服务器无法安装GDAL。因此,我无法链接到共享库。相反,我必须链接到静态库,但是没有给出。
我已经下载了GDAL源代码from here(2.3.2最新稳定版-2018年9月),并遵循了构建说明from here。由于我已经在GDAL上运行了Debian,并且不想弄乱它,因此我遵循了“在非根目录下安装”的说明,并对“某些注意事项”部分中的最后一项进行了一些调整:>
cd /home/rodrigo/Downloads/gdal232/gdal-2.3.2
mkdir build
./configure --prefix=/home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/ --without-ld-shared --disable-shared --enable-static
make
make install
export PATH=/home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/bin:$PATH
export LD_LIBRARY_PATH=/home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/lib:$LD_LIBRARY_PATH
export GDAL_DATA=/home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/share/gdal
/usr/bin/gdalinfo --version
build/bin/gdalinfo --version
第一个/usr/bin/gdalinfo --version
给出2.1.2(先前安装的版本)。第二个build/bin/gdalinfo --version
给出2.3.2(刚刚构建的版本)。
现在,我的程序仅使用ogrsf_frmts.h
头,该头位于/usr/include/gdal/
或/home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/include/
目录中,具体取决于构建。没有ogrsf_frmts.a
文件,只有libgdal.a
。这是我应该链接的文件吗?如果是这样,怎么办?到目前为止,我已经尝试过:
gcc geofragc.cpp -l:libgdal.a
gcc geofragc.cpp -Wl,-Bstatic -l:libgdal.a
gcc geofragc.cpp -Wl,-Bstatic -l:/home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/lib/libgdal.a
gcc geofragc.cpp -Wl,-Bstatic -l/home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/lib/libgdal.a
gcc geofragc.cpp /home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/lib/libgdal.a
gcc geofragc.cpp -l/home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/lib/libgdal.a
gcc geofragc.cpp -l:/home/rodrigo/Downloads/gdal232/gdal-2.3.2/build/lib/libgdal.a
但没有任何效果。我想念什么?
答案 0 :(得分:3)
您可以使用gdal-config
程序来获取正确的编译和链接选项。该程序是GDAL库的一部分,它具有自己的选项:
hekto@ubuntu:~$ gdal-config --help
Usage: gdal-config [OPTIONS]
Options:
[--prefix[=DIR]]
[--libs]
[--dep-libs]
[--cflags]
[--datadir]
[--version]
[--ogr-enabled]
[--gnm-enabled]
[--formats]
您必须确保该程序在您的搜索路径上,或者您可以创建别名-例如:
alias gdal-config='/home/rodrigo/Downloads/gdal232/gdal-2.3.2/bin/gdal-config'
现在,您的编译和链接命令将变为以下命令:
g++ `gdal-config --cflags` geofragc.cpp `gdal-config --libs` `gdal-config --dep-libs`
您必须使用 g++
编译器来链接C ++构建的库。
另一种选择是使用以下几行创建一个Makefile
:
CXXFLAGS += ${shell gdal-config --cflags}
LDLIBS += ${shell gdal-config --libs}
LDLIBS += ${shell gdal-config --dep-libs}
geofragc: geofragc.cpp
,然后用此make
呼叫Makefile
。
我希望会有所帮助。