当前位置: 首页 > article >正文

利用CMake工具从源码编译出osgEarth库

1.前言

       osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在OpenSceneGraph(为了便于后文表述,简称为osg)基础上实现了瓦片调度插件,可选四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,TMS,VPB,filesystem等),再结合一套地理投影转换插件,这样就能够实现高效处理加载调度地理数据在三维地球上的显示,实现三维虚拟地球。

         本文讲解如何利用cmake等工具从osgEarth源码编译出osgEarth库。

2.源码下载及相关文档链接

  •  osgEarth源码可以从osgEarth源码下载。
  • 从Download | Download | CMake下载 CMake图形化工具,截至2023年4月5日,最新版本为3.26.3。直接双击安装即可。

  •  官网学习文档为:Welcome to osgEarth! — osgEarth 3.3 documentation

3.环境说明

      本人环境说明如下:

  • Windows 11 家庭中文版 22H2 22621.1413
  • Microsoft Visual Studio Community 2022 (64 位) - Current
    版本 17.5.1
  • CMake 3.23.0-rc2
  • OpenSceneGraph-3.6.2
  • osgearth-3.2

特别说明:osgearth和osg版本代差不能太大,否则编译osgearth时会报很多osg的头文件找不到的错误。现实中,我用osgearth3.2版本,而osg用3.4.1版本,则报很多类似如下的错误:

无法打开包括文件: “osg/BindImageTexture”: No such file or directory
error C2039: "VertexArrayState": 不是 "osg" 的成员

这是因为osgearth3.2版本用到很多osg新加入的功能,而这些功能在版本较低的osg中没有导致。

4.第三方库编译

  • 从GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format下载prototbuffers库,并用CMake生成VS工程进行编译。注意版本不要选得太老,也不要选的太新,我选的是prototbuffers 3.13.0。
  • 从OpenGL SDK: GLEW - The OpenGL Extension Wrangler Library下载glew库。
  • 从GitHub - libgeos/geos: Geometry Engine, Open Source下载geos库。并用CMake生成VS工程进行编译。
  • 从GitHub - OSGeo/gdal: GDAL is an open source MIT licensed translator library for raster and vector geospatial data formats.下载gdal库。,并用CMake生成VS工程进行编译。
  • 从https://github.com/curl/curl下载curl库,并用CMake生成VS工程进行编译。
  • 从zlib Home Site下载zlib库,并编译出lib和dll。

关于如何用CMake生成VS工程,参见 后文描述,和后文利用CMake编译osgEarth类似。

5.编译及编译错误处理

5.1 编译

1):因为osgearth是在osg库基础上开发的,需要配置osg库才行,所以需先从osg源码编译出osg库,具体编译方法参见《windows平台下用CMake编译osg》博文。

2):打开CMake界面,在CMake图形界面中的“Where is the source code:”的编辑框中输入osgearth-3.2源码目录,注意:该目录必须是CMakeList.stxt所在目录,且目录路径不能有中文,否则CMake会报错。 

3):在“Where to build the binaries”中输入osgearth-3.2编译、链接后生成文件的存放目录。为避免编译产生的文件和源码混放在一起,一般在源码目录的同级目录新建一个类似build目录来存放编译输出结果文件。CMake界面如下:

 图1

 4):点击cmake图形界面中的“configure”按钮或“Tools->Configure”菜单,如果是初次执行,则弹出如下界面:

  根据本机装的VS选择VS版本,我本机装的是VS2022。注意:后面一项得选x64,相信现在用win32的已经很少了。单击Finish按钮,关闭该对话框回到cmake主界面,单击左下角的“Genrerate”,出现如下错误:

 这是因为osg相关库及某些第三方库没有配置,如下:

解决方法如下: 

  • 找到步骤1)编译出来的osg库和头文件,并将上图蓝色框中所有和osg有关的NOTFOUND的信息都配置好。
  • 将上图中cur、gdal、GEOS、GLEW、zlib、protobug库有关的NOTFOUND的信息都配置好。
  • 从SQLite Download Page下载sqlite3库和头文件,并配置好。

说明:

  • 暂时只需cur、gdal、GEOS、GLEW、zlib、protobug、sqlite3这几个必须库
  • 其它第三方库不用配置、不用管,要下载全部第三方库挺不容易的,一旦在cmake中配置了其它非必须库,则又会带出很多其它库,且因为其它非必须库在网上很难找全,从而又会导致如下错误:
 Error in configuration process, project files may be invalid
  • 不要勾选CMake中的OSGEARTH_BUILD_LEGACY_SPLAT_NODEKIT、OSGEARTH_BUILD_PROCEDURAL_NODEKIT、OSGEARTH_BUILD_ROCKSDB_CACHE、OSGEARTH_BUILD_SILVERLINING_NODEKIT,否则需要下载LEGACY、PROCED、ROCKSDB、SILVERLINING库,这几个库很难在网上找到,暂时不知道这几个库起什么作用。
  • 我的cmake配置如下:

所有配置好后,单击“configure”,之后单击“Generate”,然后单击“Open Project”启动VS开始编译。

 5.2.编译错误处理

1)无法打开包括文件: “sqlite3.h”: No such file or directory

     这是在CMake中没有配置sqlite3引起的,请按前文描述配置好该库。

2)无法打开包括文件: “vector_tile.pb.h”: No such file or directory

     这是在CMake中没有配置protobuf引起的,请按前文描述配置好该库。

3)   error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值     “MDd_DynamicDebug”不匹配值“MTd_StaticDebug”

解决方法:找到报错的工程,然后在该工程单击右键,选择“属性->配置属性->C++->代码生成”属性页中的“运行库”下拉框中选择“多线程 (/MTd)”,如果还不行改为其它的试试,如:MT、Md等 。
 


http://www.kler.cn/a/7319.html

相关文章:

  • pytorch tensor在CPU和GPU之间转换,numpy之间的转换
  • 【软件测试】设计测试用例的万能公式
  • 基于opencv制作GUI界面
  • leetcode面试 150题之 三数之和 复刷日记
  • 阮一峰科技爱好者周刊(第 325 期)推荐工具:一个基于 Next.js 的博客和 CMS 系统
  • ubuntu22 安装 minikube
  • Java基础——可变参数,集合操作工具类Collections
  • 【NLP入门教程】五、命名实体识别
  • 微服务学习-SpringCloud -Nacos (单机部署)
  • Windows 上使用 VS2022 使用远程Linux 系统调试运行代码
  • Linux中的算法分离手段
  • Git Commit Message 应该怎么写?
  • 【案例实践】MCM箱模型实践技术应用与O3形成途径、生成潜势、敏感性分析
  • 【创作赢红包】Activity初窥门径
  • C#,初学琼林(04)——查询(搜索)数组内指定(值)的元素与全文检索“倒排序”技术的实现代码源程序
  • OMG,太牛了!!!华为18级架构师总结出24W字Java面试手册
  • 伪数组和真数组的区别
  • 批发进销存管理软件,商品分类管理,对商品分类批量价格管理,商品分类导入导出的操作
  • acwing1047. 糖果
  • 技术宅小伙:看看面试官都问了些什么(Java系列)
  • SpringCloud服务注册中心——Eureka
  • 华为阿里版ChatGPT横空出世,谁的成效更好呢?
  • 【云原生进阶之容器】第五章容器运行时5.2节--容器运行时接口规范CRI
  • [论文速览] Sparks of Artificial General Intelligence: Early experiments with GPT-4
  • esxi的安装配置以及新建虚拟机
  • Java核心技术知识点笔记—视图与包装器