1、简介

gdal3.1.0编译过程中必须依赖proj,编译gdal必须要编译proj,proj的编译需要sqlite3,因此想要编译gdal3.1.0需要先编译proj和sqlite3

2、关于sqlite3

版本3.32,它是一个小型的数据库,其官网上也提供了其动态库包和源代码,但是动态库没有lib文件,根据网上的教程我的编译过程如下:

下载:sqlite-amalgamation-3320100.zip(sqlite3ext.h,sqlite3.h,sqlite3.c, shell.c)

sqlite-dll-win64-x64-3320100.zip(sqlite3.dll, sqlite3.def)

两个文件,使用vs将sqlite3ext.h,sqlite3.h,sqlite3.c和sqlite3.def加入到工程里面,并对工程做如下配置:

1)预处理器

增加如下宏

_USRDLL

SQLITE_ENABLE_RTREE

SQLITE_ENABLE_COLUMN_METADATA

SQLITE_ENABLE_FTS5

SQLITE_ENABLE_FTS3

SQLITE_ENABLE_UNLOCK_NOTIFY

SQLITE_ENABLE_DESERIALIZE

SQLITE_ENABLE_SERIALIZE

2)模块定义文件 sqlite3.def

3)在sqlite3.def增加一行

sqlite3_unlock_notify

完成这样的配置后既可以生成静态库,也可以生成动态库,同时如果加上shell.c文件可以生成sqlite.exe文件,据此我生成了proj所需要的

include  sqlite3.h、sqlite3ext.h

bin  SQLite3.exe

lib  SQLite3.lib

3、关于proj

版本6.01,新版的proj4(官方说这个项目虽然升级了,但还是叫proj4),相对于旧的版本,已经有很大的变化了。因为它使用了sqlite3文件来存储各种坐标系统的定义等信息,所以必须依赖sqlite3,使用CMAKE编译,首先配置CMAK

主要配置了include、exe、lib和安装目录,同时编译过程中会下载gtest,由于在内网编译,我首先下载了gtest放到了

D:\gdal\PROJ-6.1\build\googletest-download\googletest-prefix\src

目录下面,完成了cmake的配置,随后启动vs的64位控制台,切换到目标路径,输入:

msbuild ALL_BUILD.vcxproj /p:configuration="Release"

msbuild INSTALL.vcxproj /p:configuration="Release"

完成了proj4的编译,但是好像只能进行静态编译,动态编译会有问题,随后如果需要动态编译结果还需要回来做动态编译库。

补充:关于编译动态库需要配置BUILD_LIBPROJ_SHARED 为true才可以

4、编译GEOS

使用版本3.4.0,在nmake.opt中配置

GEOS_MSVC = 14.10

GEOS_MSC = 1910

nmake /f makefile.vc (BUILD_DEBUG=1如果debug模式的话)

5、增加KML编译选项

编译过程中发现需要增加libkml的选项,在github里面下载了libkml的三方库(其实最终用的是libkml-windev这个分支),按照教程进行了静态库的编译,由于构建这个库的VS工程比较老了,所以我先升级为vs2010编译成功后,再生成vs2017,后面可以直接打开主目录下的libkml.sln即可编译。

编译完成后发现LIBKML数据一直识别不了,一直找不到原因,后面我把整个gdal清空了

nmake /f makefile.vc clean

然后就能编译了,但是编译过程发现了跟expat相关的一系列链接错误无法找到一些链接符号,我又下载了最新的expat版本,重新编译了一下,关于这方面的错误就没有了,但是还有关于uriparser的链接错误,也是找不到链接符号,又用vs2017重新编译了这个库,替换了静态lib,然后就编译成功了。

下载编译zlib的库

编译ThirdParty的minizlib

最终整理,需要重新编译生成,好像gdal需要的minizip.lib并没有用到

uriparser.lib, libexpat.lib, minizip_static.lib, zlibwapi.lib

zlibwapi.dll, libexpat.lib

6、编译gdal

1)在nmake.opt里面进行编译设置

# WIN64=YES  取消#编译64位

MSVC_VER=1910  使用vs2017

GDAL_HOME设置安装路径

DLLBUILD=1 为动态编译   0位静态编译

PROJ_INCLUDE/PROJ_LIBRARY 设置proj路径

SQLITE_INC/SQLITE_LIB 设置sqilite路径

2)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:\gdal\geos-3.4.0

GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS

GEOS_LIB     = $(GEOS_DIR)/src/geos_c_i.lib

3) libkml设置

# Uncomment out the following lines to enable LibKML support.

#LIBKML_DIR = C:/Dev/libkml

#LIBKML_INCLUDE = -I$(LIBKML_DIR)/src -I$(LIBKML_DIR)/third_party/boost_1_34_1

#LIBKML_LIBRARY = $(LIBKML_DIR)/msvc/Release

#LIBKML_LIBS =    $(LIBKML_LIBRARY)/libkmlbase.lib \

#            $(LIBKML_LIBRARY)/libkmlconvenience.lib \

#            $(LIBKML_LIBRARY)/libkmldom.lib \

#            $(LIBKML_LIBRARY)/libkmlengine.lib \

#            $(LIBKML_LIBRARY)/libkmlregionator.lib \

#            $(LIBKML_LIBRARY)/libkmlxsd.lib \

#            $(LIBKML_LIBRARY)/minizip_static.lib \

#            $(LIBKML_DIR)/third_party\expat.win32/libexpat.lib \

#            $(LIBKML_DIR)/third_party\uriparser-0.7.5.win32/release/uriparser.lib \

#            $(LIBKML_DIR)/third_party\zlib-1.2.3.win32/lib/minizip.lib \

#            $(LIBKML_DIR)/third_party\zlib-1.2.3.win32/lib/zlib.lib

LIBKML_DIR = D:/gdal/libkml-windev

LIBKML_INCLUDE=-I$(LIBKML_DIR)/src I$(LIBKML_DIR)/third_party/boost_1_34_1

LIBKML_LIBRARY = $(LIBKML_DIR)/x64/Release

LIBKML_LIBS =      $(LIBKML_LIBRARY)/libkmlbase.lib \

$(LIBKML_LIBRARY)/libkmlconvenience.lib \

$(LIBKML_LIBRARY)/libkmldom.lib \

$(LIBKML_LIBRARY)/libkmlengine.lib \

$(LIBKML_LIBRARY)/libkmlregionator.lib \

$(LIBKML_LIBRARY)/libkmlxsd.lib \

$(LIBKML_LIBRARY)/minizip_static.lib \

$(EXPAT_LIB) \

$(LIBKML_DIR)/third_party/uriparser-0.7.5.win32/release/uriparser.lib \

$(LIBKML_DIR)/third_party/zlib-1.2.3.win32/lib/minizip.lib \

$(LIBKML_DIR)/third_party/zlib-1.2.3.win32/lib/zlibwapi.lib

4)编译  切换到gdal主目录

nmake /f makefile.vc (DEBUG=1如果debug模式的话)

nmake /f makefile.vc devinstall

最终完成了gdal编译  并且加入geos,proj(必备项),libkml这些可选项。

5) 关于调试

编译完的gdal代码一直无法进行调试,需要增加编译设置才能调试源代码

nmake /f makefile.vc  DEBUG=1  ANALYZE=1  WITH_PDB=1

gdal3.1.0+VS2017+geos+kml编译总结的更多相关文章

  1. win10 x64 VS2017 PJSIP 视频通话编译流程

    win10 x64 VS2017 PJSIP 视频通话编译流程 1. 下载PJSIP源码 PJSIP源码下载地址:https://www.pjsip.org/ 2. 阅读一遍官方的文档 文档地址:ht ...

  2. 在阿里云中编译Linux4.5.0内核 - Ubuntu内核编译教程

    实验环境:Ubnuntu 64位(推荐使用14.04)+Xshell 阿里云现在提供的云服务器很好用的,用来编译内核性能也不错.本文介绍最基本的内核编译方法,为了方便,所有操作均在root用户下进行. ...

  3. 英蓓特Mars board的android4.0.3源码编译过程

    英蓓特Mars board的android4.0.3源码编译过程 作者:StephenZhu(大桥++) 2013年8月22日 若要转载,请注明出处 一.编译环境搭建及要点: 1. 虚拟机软件virt ...

  4. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  5. ACE-6.1.0 linux 下的编译与安装步骤

    ACE-6.1.0 linux 下的编译与安装步骤  引用至http://www.cnblogs.com/liangxiaxu/archive/2013/03/07/2948417.html 1.从  ...

  6. Hadoop-2.3.0的Eclipse插件编译

    Hadoop-2.3.0的Eclipse插件编译 #cd /usr/local/src/hadoop2x-eclipse-plugin-master/src/contrib/eclipse-plugi ...

  7. vs2017+qt5.x编译32位应用<转>

    原文地址:https://www.cnblogs.com/woniu201/p/10862170.html 概述 最近有同学私信我,问如何使用vs2017+qt5.10编译出32位的应用,需要使用ms ...

  8. 【Qt开发】vs2017+qt5.x编译32位应用

    概述 最近有同学私信我,问如何使用vs2017+qt5.10编译出32位的应用,需要使用msvc2017_x86的插件,然而qt官网并没有提供,只能使用源码编译生成msvc2017_x86插件,使用n ...

  9. edgex0.7.1_1.0.1的X86编译和交叉编译

    一. X86编译 1. 安装zeromq库 根据setup script安装: wget https://github.com/zeromq/libzmq/releases/download/v4.2 ...

随机推荐

  1. 通过HttpURLConnection下载图片到本地--下载附件

    一.背景说明 现在我做的系统中,需要有一个下载附件的功能,其实就是下载图片到本地中.相应的图片保存在多媒体系统中,我们只能拿到它的资源地址(url),而不是真实的文件. 这里记录的是下载单个图片.下篇 ...

  2. 关于JDK高版本下RMI、LDAP+JNDI bypass的一点笔记

    1.关于RMI 只启用RMI服务时,这时候RMI客户端能够去打服务端,有两种情况,第一种就是利用服务端本地的gadget,具体要看服务端pom.xml文件 比如yso中yso工具中已经集合了很多gad ...

  3. DFS模板

    DFS模板 题型分类:我们可以将DFS题分为两大类: 1 . 地图型:这种题型将地图输入,要求完成一定的任务.因为地图的存在.使得题意清楚形象化,容易理清搜索思路.AOJ 869-迷宫(遍历地图,四向 ...

  4. 【OI】C++STL 不定长数组 vector

    Vector 本来是向量的意思,只不过在用法上类似于一个不限长度的数组. 定义语法:vector<数据类型> 名称; 一.头文件:<vector> (bits/stdc++请忽 ...

  5. 进程代数CSP基础知识总结(Communicating sequencing process)

    进程代数(Process Algebra) Process Algebra 理论 提出者 理论名称 缩写 论文链接 简介 C. A. R. Hoare/Tony Hoare Communicating ...

  6. PHP中的IMAP扩展简单入门

    对于邮件处理来说,大家比较熟悉的应该是 POP3 . SMTP 这类的协议,而今天我们介绍的 IMAP 其实也是非常常用的一种邮件处理协议.它和 POP3 比较类似,都是以接收处理邮件为主.不过相对于 ...

  7. PHP中的文件对比扩展

    文件对比这个扩展现在用得比较少,因为大部分情况下我们都在使用一些代码管理工具,比如 Git 或者 Svn 之类的,其实它的作用就非常类似这类工具,另外还有一个非常常用的 Beyond Compare ...

  8. TP6出现错误 No input file specified.

    解决办法是打开public下的.htaccess文件, 把:RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 改为:RewriteRule ^(.*)$ index ...

  9. 接口Mock测试

    什么是Mock测试? Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的比较复杂的对象(如 JDB ...

  10. web带宽估算方法

    每个连接约占用10Kb的带宽,以3万总用户数和10%的在线率计算,并按照10%的冗余率,服务器总带宽=每秒总连接数*10Kbps /(1-冗余率)/1024. 带宽占用(Mbps)=30000*10% ...