一、环境准备
1、VS 2022
2、CMAKE 3.26.6
二、资源
1、LIBKML源码
三、编译
(一)GDAL3.8.1编译:
这里不详细介绍gdal3.8.1的编译,可以参考以下方法:
Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法_c++ proj-CSDN博客
(二)LIBKML库编译
1、源码下载
虽然下载的源码中带了所需的第三方库源码以及编译好的库,不过在链接gdal的时候会出现报错。


2、打开libkml.sln,开始编译
1)我这里使用的是自己编译的expat库,自带的expat也可以使用
expat源码下载:

填写好源码路径和构建路径,依次点击Configure、Generate、Open Project,打开后直接生成即可(x64):

2)如果出现无法打开某个文件,根据报错加上相应头文件路径即可。

3)如果出现错误提示是“error C2137: 空字符常量,需要在中间加个空格,也可参考这参考:GDAL集成对KML文件的支持_gdal 导出kml-CSDN博客支持中文字符

3、为防止gdal链接错误,下面工程需要添加一些文件一起编译
libkmldom:xal.h、xal.cc、gx_timeprimitive.h、gx_timeprimitive.cc、gx_tour.h、gx_tour.cc
libkmlbase: zip_file.h、zip_file.cc、uri_parser.cc、xml_namespaces.h、xml_namespaces.cc
libkmlengine:id_mapper.h、id_mapper.cc、find_xml_namespaces.h、find_xml_namespaces.cc
注:如果不加会出现以下错误

4、编译成功后得到相应的lib

(三)构建gdal扩展libkml
1、需在gdal初始构建成功基础下,需要填写proj库和tiff库,这里可以参考Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法_c++ proj-CSDN博客


2、填写EXPAT的信息

注:根据官方文档,集成了expat库还可以支持其他格式,不过并没有测试。
3、查看源码libkml的CMakeList.txt,需要zlib库,这里使用libkml源码自带第三方库。


4、填写LIBKML信息,依次点击Configure、Generate、Open Project

LIBKML_BASE_LIBRARY:libkmlbase.lib
LIBKML_DOM_LIBRARY:libkmldom.lib
LIBKML_ENGINE_LIBRARY:libkmlengine.lib
LIBKML_INCLUDE_DIR = libkml2.2\src
LIBKML_MINIZIP_LIBRARY:minizip.lib
LIBKML_URIPARSER_LIBRARY:uriparser.lib
注:以上的lib填写需填写根据实际路径
5、打开构建目录里面的gdal.sln,右键ogr_LIBKML属性添加boost目录,这里可以先整理boost的头文件到同一目录下,就不需要这部操作。


6、开始编译

(四)编译报错
1、编译ALL_BUILD后会出现以下报错,需要重新编译libkml自带的第三方库


1)编译minizip.lib(x64)
创建静态库项目,删除默认的四个文件,属性设置不编译预编译头,添加源码文件,头文件和c文件。



编译报错,这个根据提示进行修改:
方法一:因为该版本VS认为这些函数是不安全,需要替换成安全函数,例如fopen->fopen_s。
方法二:添加预处理器定义:_CRT_SECURE_NO_WARNINGS

2)编译uriparser.lib(x64)
创建静态库项目,删除默认的四个文件,把include和lib文件添加到项目里,设置不编译预编译头生成即可。

3)编译zlib(x64)
源码下载:


使用cmake填写好源码路径和构建路径,依次点击Configure、Generate、Open Project,只生成zlib即可

2、如果租后出现这样错误,libkmlbase.lib工程设置不使用预编译头,重新编译。

9、编译结果
最后编译结果结果默认在C:\Program Files这个目录下,可以在gdal构建目录下的gdal.pc文件可以查看

(四)使用
1、把依赖的dll都添加到gdal编译目录bin下。
四、参考:
1、GDAL集成对KML文件的支持_gdal 导出kml-CSDN博客
2、Visual Studio配置并编译C++环境下GDAL库、SQLite环境与PROJ库的方法_c++ proj-CSDN博客
本文详细指导如何在VS2022环境下使用CMAKE3.26.6编译GDAL3.8.1和LIBKML库,涉及资源准备、编译步骤、错误处理及使用,包括自定义编译expat、minizip和uriparser等第三方库。

被折叠的 条评论
为什么被折叠?



