gdal3.1.0+VS2017+geos+kml编译总结
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编译总结的更多相关文章
- win10 x64 VS2017 PJSIP 视频通话编译流程
win10 x64 VS2017 PJSIP 视频通话编译流程 1. 下载PJSIP源码 PJSIP源码下载地址:https://www.pjsip.org/ 2. 阅读一遍官方的文档 文档地址:ht ...
- 在阿里云中编译Linux4.5.0内核 - Ubuntu内核编译教程
实验环境:Ubnuntu 64位(推荐使用14.04)+Xshell 阿里云现在提供的云服务器很好用的,用来编译内核性能也不错.本文介绍最基本的内核编译方法,为了方便,所有操作均在root用户下进行. ...
- 英蓓特Mars board的android4.0.3源码编译过程
英蓓特Mars board的android4.0.3源码编译过程 作者:StephenZhu(大桥++) 2013年8月22日 若要转载,请注明出处 一.编译环境搭建及要点: 1. 虚拟机软件virt ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- ACE-6.1.0 linux 下的编译与安装步骤
ACE-6.1.0 linux 下的编译与安装步骤 引用至http://www.cnblogs.com/liangxiaxu/archive/2013/03/07/2948417.html 1.从 ...
- Hadoop-2.3.0的Eclipse插件编译
Hadoop-2.3.0的Eclipse插件编译 #cd /usr/local/src/hadoop2x-eclipse-plugin-master/src/contrib/eclipse-plugi ...
- vs2017+qt5.x编译32位应用<转>
原文地址:https://www.cnblogs.com/woniu201/p/10862170.html 概述 最近有同学私信我,问如何使用vs2017+qt5.10编译出32位的应用,需要使用ms ...
- 【Qt开发】vs2017+qt5.x编译32位应用
概述 最近有同学私信我,问如何使用vs2017+qt5.10编译出32位的应用,需要使用msvc2017_x86的插件,然而qt官网并没有提供,只能使用源码编译生成msvc2017_x86插件,使用n ...
- edgex0.7.1_1.0.1的X86编译和交叉编译
一. X86编译 1. 安装zeromq库 根据setup script安装: wget https://github.com/zeromq/libzmq/releases/download/v4.2 ...
随机推荐
- outerHTML和outerText的赋值是异步的
用JavaScript操作DOM时,经常有生成复杂HTML结构的需求.此时,通常不是用标准DOM接口(如createElement().setAttribute().append()等)来语句式地生成 ...
- Spring5(六)——AspectJ(xml)
一.AspectJ 1.介绍 AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,也可以说 AspectJ 是一个基于 Java 语言的 AOP 框架.通常我们在 ...
- (6)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Boot项目详细搭建步骤
在 Spring Tools 4 for Eclipse 中依次选择 File->New->Maven Project,然后在出现的界面中按图所示增加相关信息. <paren ...
- jmeter5.2 性能测试 资源监控 JMeterPlugins1.4 ServerAgent2.2.1
一.性能工具的安装部署 1.下载JMeterPlugins-Standard-1.4.0.zip的安装包 2.解压JMeterPlugins-Standard-1.4.0.zip,将其中\lib\ex ...
- 常用的word技巧
自动生成标题 自动生成目录 显示导航列 修订 查看最终版本
- Python中Tk模块简单窗口设计
Python中Tk和PyQt都可以设计小程序,区别在于:Tk界面美观度相对较差,但由于是Python的内置模块,最终生成的程序大小相比于PyQt较小. import tkinter # 导入TKint ...
- Python Software Foundation
The Python Software Foundation (PSF) is a 501(c)(3) non-profit corporation that holds the intellectu ...
- 项目部署(ubuntu+uwsgi+nginx+supervisor+django)
一.在开发机上的准备工作 1. 确认项目没有bug. 2.设置`ALLOW_HOST`为你的域名,以及ip地址. 4.设置`DEBUG=False`,避免如果你的网站产生错误,而将错误信息暴漏给用户. ...
- P4640-[BJWC2008]王之财宝【OGF,Lucas定理】
正题 题目链接:https://www.luogu.com.cn/problem/P4640 题目大意 \(n\)种物品,其中\(t\)种物品是有个数限制的,第\(i\)种限制为\(b_i\),求选出 ...
- Redis基础数据结构-基于2.8
SDS SDS是Redis中String的底层数据结构,数据结构如下,SDS保留了传统的C字符串表达方式即数组的最后一个元素是'/0'结尾.此外还添加了两个字段len和free,其中len表示字符串长 ...