VS2019编译OSG+OSGEarth+OSGQt全攻略:从环境配置到Qt项目集成
1. 项目概述为什么要在VS2019上编译OSG全家桶搞三维GIS或者虚拟仿真的朋友对OSGOpenSceneGraph这个开源三维图形引擎应该不陌生。它基于OpenGL封装得比较好性能强悍生态也成熟是很多行业应用和科研项目的底层支柱。而OSGEarth则是构建在OSG之上的地理信息渲染引擎能让你方便地加载、渲染各种在线或离线的地图、高程、影像数据相当于给OSG装上了地理空间的“大脑”。至于OSGQt则是连接OSG渲染世界和Qt这个跨平台GUI框架的桥梁让你能用Qt的窗口、控件来承载和交互OSG的三维场景。那么为什么要自己动手在VS2019上编译这一套东西呢直接从官网下编译好的二进制包不香吗这里面的门道我踩过不少坑可以跟你好好唠唠。首先官方的预编译版本其编译选项、依赖库版本往往是固定的。如果你的项目有特殊需求比如需要链接特定版本的第三方库如特定版本的GDAL、Proj、需要开启或关闭某些OSG插件如支持DDS纹理、数据库插件或者你需要进行深度的源码级调试和定制那么自己从源码编译就是唯一的选择。其次VS2019作为微软目前主流的稳定开发环境之一其C编译器MSVC对C17标准的支持已经比较完善编译出来的程序性能和兼容性都更有保障。自己编译的过程也是你彻底摸清OSG依赖关系、构建选项和潜在问题的最佳机会这对后续的项目开发和问题排查有莫大的好处。简单说这个“VS2019编译OSG3.7.0OSGEarth3.3OSGQt”的过程目标就是打造一个完全可控、深度定制、并且能与你的VS2019 Qt项目无缝集成的三维地理可视化开发环境。接下来我会把整个从环境准备、源码获取、依赖配置、编译参数设置到最终集成测试的全过程以及我趟过的所有雷区毫无保留地分享给你。2. 环境准备与依赖项梳理自己编译大型C项目最怕的就是环境不对依赖缺失。这就像盖房子地基和建材没准备好后面全是空中楼阁。这一节我们就把所有需要的“建材”清点清楚并放到正确的位置上。2.1 基础开发环境搭建工欲善其事必先利其器。我们的核心工具链是VS2019和CMake。Visual Studio 2019建议安装社区版免费。在安装时工作负载务必勾选“使用C的桌面开发”。在右侧的“安装详细信息”中确保选中了“MSVC v142 - VS 2019 C x64/x86 生成工具”和“Windows 10 SDK”。版本尽量选择较新的更新版本以减少一些已知的编译器Bug。CMake这是编译过程的“总指挥”。去CMake官网下载最新稳定版的安装程序如3.25。安装时记得勾选“Add CMake to the system PATH for all users”这样可以在任意命令行使用。安装完成后在命令行输入cmake --version验证。Git用于获取源码。同样官网下载安装配置好环境变量。系统环境建议使用64位的Windows 10或Windows 11。确保有足够的磁盘空间整个编译过程加上源码、生成文件至少需要15-20GB。2.2 第三方依赖库的获取与部署这是编译OSG和OSGEarth最复杂、最容易出错的一环。它们依赖不少外部库我们需要提前准备好。我的建议是尽量使用预编译的二进制库而不是自己再编译一遍依赖的依赖否则会陷入无尽的依赖地狱。一个高效的方法是使用vcpkg这个微软的C库管理工具来安装大部分依赖。但需要注意的是vcpkg中某些库的版本可能与我们要求的特定版本不匹配。因此这里我采用“混合策略”核心、版本敏感的库手动准备通用的库用vcpkg或手动下载。核心依赖清单与准备方式依赖库主要用途推荐获取方式与版本关键说明OpenThreadsOSG自带的跨平台线程库随OSG源码一起OSG 3.7.0源码包内已包含。libjpeg, libpng, libtiff, libwebp, FreeType图像读写与字体手动下载预编译库推荐从官方或知名镜像站下载编译好的-dev包包含.lib和.dll。注意区分Release/Debug和x64版本。zlib数据压缩手动下载或vcpkg基础压缩库必须。GDAL地理数据抽象库手动下载特定版本OSGEarth的核心依赖。强烈建议使用GDAL 3.4.3或3.5.x避免使用最新的3.6因为接口可能有变动。从GIS Internals下载对应VS2019 x64的预编译包最方便。PROJ坐标转换库随GDAL包或单独下载GDAL的高版本预编译包通常已集成匹配的PROJ如PROJ 9.x。确保GDAL和PROJ版本兼容。Geos几何计算引擎vcpkg或手动下载OSGEarth用于几何运算。Curl网络数据传输vcpkg或手动下载用于OSGEarth的在线数据获取如TMS服务。Sqlite3嵌入式数据库vcpkg或手动下载用于缓存等。部署目录结构建议为了管理清晰我习惯在非系统盘如D盘创建一个DevLibs目录里面按库名和版本存放D:\DevLibs\ ├─gdal-3.4.3-vs2019-x64\ │ ├─include\ │ ├─lib\ │ └─bin\ ├─proj-9.1.0-vs2019-x64\ ├─jpeg-vs2019-x64\ ├─png-vs2019-x64\ ...每个库的include,lib,bin目录分别存放头文件、静态库/导入库.lib和动态库.dll。这样在CMake配置时路径指定非常清晰。注意所有第三方库的版本Debug/Release和平台x64必须一致混合使用会导致链接时出现“LNK2038: 检测到‘RuntimeLibrary’不匹配”等错误。通常我们以编译Release x64版本为主。2.3 源码获取与版本匹配版本兼容性是成功的另一半。OSG、OSGEarth、OSGQt三者有严格的版本对应关系。OpenSceneGraph (OSG) 3.7.0 这是相对较新的稳定版。可以从OSG官网的GitHub发布页面下载源码压缩包如OpenSceneGraph-3.7.0.zip或者用Git克隆对应标签git clone -b OpenSceneGraph-3.7.0 https://github.com/openscenegraph/OpenSceneGraph.gitOSGEarth 3.3 必须与OSG 3.7.0搭配。同样从GitHub获取git clone -b 3.3 https://github.com/gwaldron/osgearth.gitOSGQt 这里有个关键点。OSGQt的源码已经集成在OSG的主源码仓库中了。在OpenSceneGraph-3.7.0源码目录下你会发现src\osgQt文件夹。这意味着我们不需要单独下载OSGQt而是在编译OSG时通过CMake选项来启用它。版本匹配核查表OSG 3.7.0 √OSGEarth 3.3 √ (官方说明兼容OSG 3.6-3.7)OSGQt (内置) √Qt 5.15.x 或 Qt 6.2 √ (推荐Qt 5.15.2 LTS 稳定性最好)VS2019 (MSVC 2019) √确保你的Qt安装版本例如Qt 5.15.2的编译器套件如msvc2019_64与我们将要使用的VS2019 x64配置对应。3. CMake配置与生成VS工程详解有了源码和依赖库接下来就是用CMake生成VS2019的解决方案.sln文件。这一步是核心配置项繁多但决定了编译的成败和结果的性质。3.1 OSG的CMake配置与关键选项首先处理OSG。在源码根目录OpenSceneGraph-3.7.0下新建一个build文件夹用于存放生成的文件。打开CMake GUI。指定路径Where is the source code: 浏览到你的OpenSceneGraph-3.7.0目录。Where to build the binaries: 浏览到刚才新建的build目录。点击Configure选择生成器Visual Studio 16 2019。选择可选平台x64。务必选x64因为大多数地理数据处理库都是64位的。点击Finish。关键配置项红色部分需要你关注和修改ACTUAL_3RDPARTY_DIR: 这个非常重要把它设置为你存放所有第三方依赖库的根目录比如D:/DevLibs。CMake会尝试在这个目录下自动寻找所需的依赖。如果找不到再单独指定下面各项。BUILD_OSG_EXAMPLES: 默认勾选建议取消。例子工程很多编译耗时很长初期可以不要。CMAKE_INSTALL_PREFIX: 这是安装路径。设置一个你喜欢的路径如D:\Programs\OSG-3.7.0-vs2019-x64。编译安装后所有的头文件、库文件、可执行文件都会复制到这里方便后续项目引用。DYNAMIC_OPENSCENEGRAPH: 默认勾选生成动态链接库DLL。建议保持这样生成的应用程序体积小。CMAKE_DEBUG_POSTFIX: 建议设置为d。这样编译出的Debug版本库文件会以d结尾如osg141d.lib方便与Release版本osg141.lib区分和管理。OSG_USE_UTF8_FILENAME: 在Windows上如果文件路径可能包含中文建议勾选此选项。Qt相关配置CMAKE_PREFIX_PATH:这是找到Qt的关键。将其设置为你的Qt安装目录中对应msvc2019_64套件的lib/cmake文件夹的父目录。例如D:/Qt/5.15.2/msvc2019_64。CMake需要通过这个路径找到Qt的配置模块。设置好CMAKE_PREFIX_PATH后点击Configure。如果成功下面会出现OSG_QT_VERSION等选项并自动识别出Qt的路径。勾选BUILD_OSG_APPLICATIONS和BUILD_OSG_DEPRECATED_SERIALIZERS可选。确保WITH_QT选项被自动勾选或手动勾选。这会启用osgQt模块的编译。处理找不到的依赖 点击Configure后CMake会在输出信息下方日志和红色条目中提示找不到的库比如JPEG_NOT_FOUND,PNG_NOT_FOUND等。你需要手动指定例如对于JPEG_INCLUDE_DIR 浏览到D:\DevLibs\jpeg-vs2019-x64\include。对于JPEG_LIBRARY 浏览到D:\DevLibs\jpeg-vs2019-x64\lib\jpeg.lib(Release) 或...\lib\jpegd.lib(Debug)。对于ZLIB 可能需要分别指定ZLIB_INCLUDE_DIR和ZLIB_LIBRARY_RELEASE/ZLIB_LIBRARY_DEBUG。耐心地一个个解决。所有红色条目消失且底部日志显示Configuring done即表示配置成功。生成VS工程 点击Generate。成功后在build目录下会生成OpenSceneGraph.sln解决方案文件。3.2 OSGEarth的CMake配置要点OSGEarth的配置过程类似但依赖更多。在其源码根目录osgearth下也新建一个build文件夹。基本路径设置 源目录指向osgearth构建目录指向osgearth/build。点击Configure 生成器同样选择Visual Studio 16 2019和x64。关键配置项OSG_DIR或OpenSceneGraph_DIR:这是最重要的选项。把它指向你刚才编译OSG时设置的CMAKE_INSTALL_PREFIX目录或者指向OSG的build目录。CMake需要用它来寻找OSG的配置。例如D:/Programs/OSG-3.7.0-vs2019-x64或D:/OpenSceneGraph-3.7.0/build。GDAL_DIR: 指向你的GDAL安装目录例如D:/DevLibs/gdal-3.4.3-vs2019-x64。CMake会自动在此目录下寻找gdal-config.cmake或类似文件。PROJ_DIR: 指向PROJ的安装目录例如D:/DevLibs/proj-9.1.0-vs2019-x64。GEOS_DIR,CURL_DIR等 如果CMake找不到同样手动指定到对应的include和lib文件。CMAKE_INSTALL_PREFIX: 设置OSGEarth的安装路径如D:\Programs\OSGEarth-3.3-vs2019-x64。OSGEARTH_BUILD_EXAMPLES: 根据需要选择是否编译例子。OSGEARTH_USE_QT: 如果你需要Qt相关的功能如osgearth_qt例子确保此选项被勾选并且CMake能找到Qt通常通过CMAKE_PREFIX_PATH设置与OSG配置时相同。处理依赖 同样根据Configure后的红色提示逐一解决未找到的库如Sqlite3, Geos等。确保所有依赖都正确链接。生成工程 点击Generate 生成osgearth.sln。实操心得 CMake配置时经常出现“即使路径对了也找不到库”的情况。这时可以尝试以下步骤1) 删除build目录下的CMakeCache.txt文件然后重新Configure。2) 确保你指定的库路径下确实存在对应编译器版本和架构x64的库文件。3) 对于GDAL/PROJ这类复杂库有时需要手动在CMake GUI中搜索Search并填写GDAL_INCLUDE_DIR,GDAL_LIBRARY等变量而不是依赖GDAL_DIR。4. Visual Studio 2019中的编译与安装CMake生成解决方案后剩下的就是体力活了——用VS2019进行编译和安装。4.1 OSG的编译与安装步骤用VS2019打开OpenSceneGraph-3.7.0\build\OpenSceneGraph.sln。在解决方案资源管理器中找到CMakeTargets文件夹下的INSTALL项目。但先别急。设置解决方案配置 在工具栏上将解决方案配置从Debug切换到Release 平台切换到x64。我们首先编译Release版本。生成ALL_BUILD 右键点击解决方案资源管理器顶部的解决方案名称选择“生成解决方案”。或者先右键点击ALL_BUILD项目选择“生成”。这将编译所有必要的库和目标。这个过程耗时较长取决于CPU性能可能从十几分钟到一小时不等。编译过程中关注“输出”窗口如有错误通常以红色文字显示需要根据错误信息排查。常见编译错误C1083: 无法打开包括文件 通常是头文件路径问题。回到CMake检查相关*_INCLUDE_DIR是否设置正确。LNK1181: 无法打开输入文件“xxx.lib” 链接库找不到。检查CMake中*_LIBRARY的路径并确保该.lib文件确实存在。语法错误或C标准不兼容 OSG 3.7.0需要支持C14/17的编译器。确保VS2019版本足够新并且项目属性中C语言标准设置为“默认”或“ISO C17标准”。安装ALL_BUILD生成成功后在解决方案资源管理器中右键点击INSTALL项目选择“仅生成项目”。这会将编译好的头文件到include、库文件到lib、可执行文件到bin以及CMake配置到cmake复制到你之前设置的CMAKE_INSTALL_PREFIX目录如D:\Programs\OSG-3.7.0-vs2019-x64。重复步骤编译Debug版本 将解决方案配置切换回Debug 重复步骤4和5生成并安装Debug版本的库。安装后在安装目录的lib文件夹下你会看到带d后缀的库文件如osg141d.lib。4.2 OSGEarth的编译与安装用VS2019打开osgearth\build\osgearth.sln。同样确保平台是x64。先编译Release配置。生成ALL_BUILD。OSGEarth的编译依赖OSG所以必须确保OSG的库特别是Release版已经正确安装并且其路径通过OSG_DIR设置能被找到。编译过程中可能遇到的特殊问题与GDAL/PROJ的链接错误 确保你指定的GDAL、PROJ库也是Release x64版本。有时GDAL的预编译包会提供多个运行时库如MD/MDd需要与你的项目属性匹配。通常使用/MD多线程DLL运行时库。找不到OSG的符号 检查OSG_DIR是否指向了包含OSGConfig.cmake文件的目录即OSG的安装目录。ALL_BUILD成功后生成INSTALL项目将OSGEarth安装到指定目录。4.3 环境变量与系统路径设置为了方便后续开发建议将编译好的库的bin目录添加到系统的PATH环境变量中。例如将D:\Programs\OSG-3.7.0-vs2019-x64\bin和D:\Programs\OSGEarth-3.3-vs2019-x64\bin添加到PATH。这样运行时系统就能自动找到所需的DLL文件。5. 集成测试与Qt项目配置编译安装完成不代表万事大吉。必须进行实际集成测试验证整个工具链是否工作正常。5.1 验证OSG及OSGQt编译成功最直接的验证方法是运行OSG自带的例子。在OSG安装目录的bin文件夹下找到osgviewer.exe。将一个OSG模型文件如cow.osg 通常位于源码的data目录复制到bin目录下然后在命令行运行osgviewer cow.osg如果成功弹出一个窗口并显示一头奶牛说明OSG核心库编译成功。对于OSGQt可以编译并运行OSG源码中examples\osgQt目录下的例子如果你在CMake中启用了例子编译。在VS中打开对应的例子项目如osgviewerQt编译并运行。如果能看到一个内嵌OSG渲染窗口的Qt应用程序说明OSGQt模块集成成功。5.2 创建并配置一个全新的QtOSGOSGEarth项目这才是终极测试。在VS2019中创建一个新的Qt Widgets Application项目确保使用Qt VS Tools插件。项目属性配置以Release x64为例C/C - 常规 - 附加包含目录 添加以下路径D:\Programs\OSG-3.7.0-vs2019-x64\include D:\Programs\OSGEarth-3.3-vs2019-x64\include D:\DevLibs\gdal-3.4.3-vs2019-x64\include D:\DevLibs\proj-9.1.0-vs2019-x64\include ... (其他依赖库的include目录)链接器 - 常规 - 附加库目录 添加以下路径D:\Programs\OSG-3.7.0-vs2019-x64\lib D:\Programs\OSGEarth-3.3-vs2019-x64\lib D:\DevLibs\gdal-3.4.3-vs2019-x64\lib D:\DevLibs\proj-9.1.0-vs2019-x64\lib ... (其他依赖库的lib目录)链接器 - 输入 - 附加依赖项 添加需要链接的库文件.lib。这是一个较长的列表通常包括osgViewer.lib osgEarth.lib osgQt.lib osgGA.lib osgDB.lib osgUtil.lib osg.lib OpenThreads.lib gdal.lib proj.lib ... (其他如geos_c.lib, curl.lib, sqlite3.lib等)技巧 你可以到OSG和OSGEarth的lib目录下查看所有.lib文件的名字按需添加。对于Debug配置记得将库名后的d加上如osgViewerd.lib。编写一个简单的测试代码 在你的Qt主窗口类中尝试创建一个基本的OSGViewer并嵌入到Qt的Widget中。也可以尝试初始化一个OSGEarth的地图视图。复制运行时DLL 将OSG、OSGEarth及其所有依赖库GDAL, PROJ, Geos, Curl, 各种图像库等的bin目录下的.dll文件复制到你的Qt项目生成的可执行文件.exe所在的目录。或者确保这些bin目录已在系统PATH中。编译并运行 如果一切配置正确你的项目应该能成功编译。运行程序如果能看到OSG或OSGEarth渲染的窗口恭喜你大功告成6. 常见编译问题与深度排查指南自己编译这么复杂的库不可能一帆风顺。下面是我总结的几个最常见、最头疼的问题及其解决方法。6.1 “找不到标识符”或“语法错误”类编译错误这类错误通常发生在开始编译OSG或OSGEarth源码时。问题表现 错误代码如C2065,C2039,C2872 提示某些类、函数或命名空间未定义。排查思路检查包含目录 首先确认项目属性或CMake生成的工程中附加包含目录是否正确包含了所有依赖库的头文件路径。特别是OSG和OSGEarth自身的include目录。检查预处理定义 某些功能需要定义宏。在VS项目属性的C/C - 预处理器 - 预处理器定义中查看CMake是否传递了必要的宏如WIN32,_WINDOWS,NDEBUGRelease,_DEBUGDebug,_CRT_SECURE_NO_WARNINGS等。OSG和OSGEarth通常会自动设置。检查C语言标准 在项目属性的C/C - 语言 - C语言标准中确保设置为“ISO C17 标准”或更高。旧的默认设置可能不支持源码中的新语法。检查头文件顺序和污染 第三方库的头文件有时会定义宏或使用通用名称导致冲突。确保在你的源码中先包含OSG/Qt等主要框架的头文件再包含其他库。6.2 “无法解析的外部符号”链接错误 (LNK2001, LNK2019)这是最典型的链接错误意味着编译器找到了函数声明头文件但链接器在库文件中找不到对应的实现。问题表现 错误信息类似error LNK2001: 无法解析的外部符号 “public: virtual void __cdecl osg::Referenced::unref(void)const ”。系统性排查步骤确认库目录和库名 这是最常见的原因。双击错误看是哪个符号找不到它属于哪个库如osg库。然后去项目属性的“附加库目录”中检查路径是否正确指向了包含该.lib文件的目录。再检查“附加依赖项”中是否列出了正确的库文件名如osg.lib对于Releaseosgd.lib对于Debug。Debug/Release不匹配绝对的重灾区确保你编译的配置Debug/Release与你链接的库版本一致。如果你在Debug模式下编译却链接了Release版的.lib文件没有d后缀一定会出现大量LNK2001错误。检查所有依赖库是否都提供了对应配置的版本。运行时库不匹配 在项目属性的C/C - 代码生成 - 运行时库设置。你的项目和你链接的所有第三方库必须使用相同的运行时库。通常使用/MD多线程DLL用于Release/MDd多线程调试DLL用于Debug。如果第三方库是用/MT静态链接运行时库编译的而你的项目用了/MD也会导致链接错误。你需要统一它们。大多数预编译的第三方库如GIS Internals的GDAL使用的是/MD或/MDd。库文件缺失或损坏 确认你指定的.lib文件确实存在于硬盘上并且文件完整。可以尝试重新下载或编译该依赖库。函数调用约定不一致 较罕见但如果你混用了C和C的编译单元或者涉及extern “C”声明需要注意调用约定。6.3 运行时崩溃或DLL加载失败程序编译链接成功但一运行就崩溃或者提示“无法找到xxx.dll”。问题表现 程序启动时崩溃或弹出系统对话框提示缺少osg141.dll,gdal304.dll等。排查思路DLL路径问题 确保所有必需的DLL文件都在可执行文件的同级目录下或者其所在目录已被添加到系统的PATH环境变量中。最稳妥的方式是将所有依赖的bin目录下的DLL复制到你的exe旁边。可以使用Dependencies原名Dependency Walker或VS自带的dumpbin /dependents your.exe命令来查看exe依赖哪些DLL。Debug/Release DLL混用 和链接错误类似如果你在Debug配置下运行却加载了Release版的DLL反之亦然会导致内存分配/释放错乱进而引发运行时崩溃。确保exe加载的DLL版本与编译配置一致。C运行时库冲突 如果不同DLL使用了不同版本或不同类型的MSVC运行时库如一个用了VS2015的一个用了VS2019的也可能导致崩溃。尽量确保所有库都用同一版本的VS2019编译。插件加载失败 OSG和OSGEarth通过插件加载各种格式的数据。如果插件DLL缺失或自身依赖不满足在加载特定格式文件时会失败或崩溃。检查bin目录下的osgPlugins-3.7.0和osgPlugins-3.7.0\osgdb_*等插件文件夹是否存在且完整。6.4 CMake无法找到Qt问题表现 CMake配置OSG或OSGEarth时WITH_QT选项灰色或勾选后报错找不到Qt。解决方案正确设置CMAKE_PREFIX_PATH为Qt的安装路径如D:/Qt/5.15.2/msvc2019_64而不是bin或lib子目录。确保你安装的Qt组件包含了对应VS2019 64位的模块如msvc2019_64。可以尝试手动指定Qt5_DIR变量指向Qt安装目录下的lib/cmake/Qt5文件夹如D:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5。有时需要删除CMake缓存CMakeCache.txt并重新配置。7. 性能优化与生产环境部署建议当你成功编译并验证了所有功能后如果打算用于实际项目开发或部署还有一些优化和注意事项。7.1 编译优化选项在CMake配置OSG和OSGEarth时可以关注以下选项以提升生成代码的性能或减小体积CMAKE_BUILD_TYPE 在CMake命令行或配置时设置为Release会开启编译器优化如/O2,/Ox。BUILD_SHARED_LIBS 默认为ON生成DLL。如果希望生成静态库.lib以简化部署可以设置为OFF。但注意静态链接会使最终可执行文件体积巨大且某些许可证可能对静态链接有要求。**OSG_USE_GLES**等 除非目标平台是移动设备或嵌入式设备否则在Windows上一般不需要开启。7.2 插件管理与裁剪OSG和OSGEarth编译后会产生大量插件在bin/osgPlugins-3.7.0目录下。对于最终部署按需保留 根据你的应用程序实际需要加载的文件格式如.osgb,.ive,.jpg,.png,.tiff,.shp,.tif等只保留必要的插件如osgdb_jpeg.dll,osgdb_png.dll,osgdb_osgearth_engine_mp.dll等。这可以显著减少部署包的体积。测试插件 移除插件前务必测试你的应用是否还能正常加载所有所需资源。7.3 部署清单将一个使用了自编译OSG/OSGEarth的Qt应用程序交付给用户时需要打包以下内容你的应用程序可执行文件.exe。所有依赖的DLL 包括OSG、OSGEarth、Qt5核心Qt5Core.dll,Qt5Gui.dll,Qt5Widgets.dll等、GDAL、PROJ、各种图像编解码库、VC运行时库vcruntime140.dll,msvcp140.dll等可以通过安装Visual C Redistributable解决或一并打包。必要的OSG/OSGEarth插件文件夹osgPlugins-3.7.0。OSGEarth的数据缓存目录如果应用使用了离线缓存。PROJ的数据库文件proj.db通常位于PROJ安装目录的share子目录下必须随程序一起发布否则坐标转换功能会失效。可以使用像windeployqtQt自带这样的工具来自动收集Qt依赖项但对于OSG/OSGEarth及其第三方依赖目前仍需手动收集。编写一个部署脚本或使用安装包制作工具如Inno Setup, NSIS来管理这个过程是明智的选择。整个编译过程虽然繁琐但一旦走通你对这套技术的掌控力会大大增强。遇到问题不再束手无策而是可以深入到源码和构建系统中去寻找答案。这份自己打造的工具链也将成为你后续进行高性能三维地理信息应用开发的坚实基石。

相关新闻