zoukankan      html  css  js  c++  java
  • Win64下编译集成GEOS和Proj4的GDAL

    1.编译GEOS

    可参看我的这篇文档 VS2015编译GEOS的debug和release版本

    2.编译Proj4

    现在最新的proj5.2.0已经可以通过cmake进行编译了,尝试了一下确实比以前要方便点。解压下载的proj5.2.0的压缩包,在cmake界面填入如下路径:

    点击“configure”,选择合适的编译器,就会出现上图的配置选项。这里注意BUILD_LIBPROJ_SHARED和BUILD_SHARED_LIBS这两个选项默认是没有勾选的,如果直接编译,之后得到的就会是静态库。由于我需要动态库,这里就都勾选了(两者分别勾选的具体含义还需要进一步确认)。此外,CMAKE_INSTALL_PREFIX这个配置项也要注意。cmake得到的工程都有install工程,生成之后就会自动把需要的头文件、lib还有dll复制到对应的目录中去,这样方便我们管理。

    之后点击“Generate”,之前设置的build目录中就生成了VS的工程。

    用VS打开工程,生成解决方案,等待编译完成。有的VS项目互相依赖,可能需要多生成几次。最后,生成一次INSTALL项目,之前CMAKE_INSTALL_PREFIX设置的目录就会有相应的头文件、dll、lib以及依赖。

    3.GDAL集成Proj4和GEOS

    我这里编译的是GDAL的2.3.3版本。解压出gdal-2.3.3目录,找到目录中的nmake.opt,里面记录着相关的编译设置。用记事本打开,修改相应的配置。以下#号注释表示之前的配置,不带#号的表示修改之后的。

    1) 修改安装的目录

    #GDAL_HOME = "C:warmerdald"
    GDAL_HOME = "D:WorkGDALBuildgdal-2.3.3
    esult"
    

    将GDAL_HOME修改为自己想要的目录。在编译和安装指令完成之后,就会把GDAL的所有的精简依赖发送到这个目录中。

    2) 配置Proj4

    # PROJ stuff
    # Uncomment the following lines to link PROJ library statically. Otherwise
    # it will be linked dynamically during runtime.
    # To use the new API of proj5 or later, use
    #PROJ_FLAGS = -DPROJ_STATIC -DPROJ_VERSION=5
    # for proj 4.x:
    #PROJ_FLAGS = -DPROJ_STATIC -DPROJ_VERSION=4
    
    #PROJ_INCLUDE = -Id:projectsproj.4src
    PROJ_INCLUDE = -ID:WorkGDALBuildproj-5.2.0src
    #PROJ_LIBRARY = d:projectsproj.4srcproj_i.lib
    !IFDEF DEBUG  
    PROJ_LIBRARY = D:WorkGDALBuildproj-5.2.0
    esultx64_debuglocallibproj_5_2_d.lib
    !ELSE  
    PROJ_LIBRARY = D:WorkGDALBuildproj-5.2.0
    esultx64_releaselocallibproj_5_2.lib
    !ENDIF 
    

    根据注释,PROJ_FLAGS是静态编译的时候才需要开启的,而刚才我们编译的Proj4编译的是动态库,所以不用管这个配置项目。PROJ_INCLUDE是需要的头文件,根据实例引用到proj的src目录即可。PROJ_LIBRARY表示需要的lib,这里根据是否debug模式,引入刚才编译的不同的.lib。

    3) 配置GEOS

    # Uncomment for GEOS support (GEOS >= 3.1.0 required)
    #GEOS_DIR=C:/warmerda/geos
    #GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/source/headers -DHAVE_GEOS
    #GEOS_LIB     = $(GEOS_DIR)/source/geos_c_i.lib
    GEOS_DIR=D:/Work/GDALBuild/geos-3.7.1
    GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS
    !IFDEF DEBUG  
    GEOS_LIB     = $(GEOS_DIR)/geos_build/x64_debug/geos_c_i_d.lib
    !ELSE  
    GEOS_LIB     = $(GEOS_DIR)/geos_build/x64_release/geos_c_i.lib
    !ENDIF 
    

    这段配置的意思是设置GEOS_DIR为GEOS的根目录,GEOS_CFLAGS引用到根目录下的capi文件夹和include文件夹作为编译需要的头文件,根据是否是debug模式,设置GEOS_LIB为对应的lib。

    4) 自定义动态库名称(可跳过)

    #GDAL_DLL =	gdal$(VERSION).dll
    !IFDEF DEBUG    
    GDAL_DLL =  gdal$(VERSION)D_CL.dll   
    !ELSE    
    GDAL_DLL =  gdal$(VERSION)_CL.dll    
    !ENDIF
    

    根据这篇文章《自定义编译gdal库》,可以将生成DLL、lib根据是否debug模式改成不同的名称。尝试过多次,修改dll名称是可以的,修改lib名称存在问题。

    5) 编译

    在安装VS2015环境后的“开始菜单”中找到“VS2015x64本机工具命令提示符”并启用。CD到gdal-2.3.3目录,依次输入以下指令(debug模式):

    nmake -f makefile.vc MSVC_VER=1900 WIN64=1 DEBUG=1 ANALYZE=1 WITH_PDB=1
    nmake -f makefile.vc MSVC_VER=1900 WIN64=1 DEBUG=1 ANALYZE=1 WITH_PDB=1 install
    nmake -f makefile.vc MSVC_VER=1900 WIN64=1 DEBUG=1 ANALYZE=1 WITH_PDB=1 devinstall
    

    第一个指令表示编译,时间较长。第二个第三个指令表示安装,会把GDAL的依赖复制到GDAL_HOME制定的的文件夹。如果需要release模式,则输入以下指令:

    nmake -f makefile.vc MSVC_VER=1900 WIN64=1
    nmake -f makefile.vc MSVC_VER=1900 WIN64=1 install
    nmake -f makefile.vc MSVC_VER=1900 WIN64=1 devinstall
    

    最后输出的结果:

  • 相关阅读:
    sql 变量赋值
    mysql 行号 获取指定行数据
    SQL Server获取指定行的数据
    sql server 创建内联表值函数
    sql server 表变量存储临时查询数据
    sql server 循环操作
    oracle for in 学习
    oracle C# 访问
    sql server insert values 多值 与oracle 的不同
    mysql 如何选择随机行
  • 原文地址:https://www.cnblogs.com/charlee44/p/10348472.html
Copyright © 2011-2022 走看看