代码之家  ›  专栏  ›  技术社区  ›  Rodrigo

使用所有静态库构建GDAL

  •  0
  • Rodrigo  · 技术社区  · 6 年前

    我想开发一个小程序来检查一个shapefile中的哪些多边形与给定的矩形相交。这个程序是用来在一个网站(与PHP的 exec() 命令)。问题是,我的web服务器无法安装GDAL,原因我不知道。所以我无法链接到共享库。相反,我必须链接到静态库,但这些库没有给出。

    我已经下载了GDAL源代码 from here (2.3.2最新稳定版本-2018年9月),并遵循构建说明 from here

    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

    现在,我的程序只使用 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
    

    编辑

    二审( gcc geofragc.cpp -Wl,-Bstatic -l:libgdal.a )正在给出以下错误:

    /usr/bin/ld: cannot find -lgcc_s
    /usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib/libgdal.a(gdalclientserver.o): In function `GDALServerSpawnAsync()':
    (.text+0x1f5e): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /usr/bin/ld: cannot find -lgcc_s
    collect2: error: ld returned 1 exit status
    
    0 回复  |  直到 5 年前
        1
  •  5
  •   HEKTO    5 年前

    你可以用 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 用这个