osgearth2.8编译问题

在使用VS2010编译osgEarth时遇到与geos库相关的protected成员访问错误。通过更换geos库的老版本成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近正在自己编译osgearth
在编译过程中,vs2010输出如下错误:


错误        160        error C2248: “geos::geom::GeometryFactory::~GeometryFactory”: 无法访问 protected 成员(在“geos::geom::GeometryFactory”类中声明)        E:\OSGRes\Download\OSGEarth\gwaldron-osgearth-2.8\src\osgEarthSymbology\GEOS.cpp        227        1        osgEarthSymbology
错误        161        error C2248: “geos::geom::GeometryFactory::~GeometryFactory”: 无法访问 protected 成员(在“geos::geom::GeometryFactory”类中声明)        E:\OSGRes\Download\OSGEarth\gwaldron-osgearth-2.8\src\osgEarthSymbology\GEOS.cpp        337        1        osgEarthSymbology
错误        163        error C2248: “geos::geom::GeometryFactory::~GeometryFactory”: 无法访问 protected 成员(在“geos::geom::GeometryFactory”类中声明)        E:\OSGRes\Download\OSGEarth\gwaldron-osgearth-2.8\src\osgEarthSymbology\GEOS.cpp        227        1        osgEarthSymbology
错误        164        error C2248: “geos::geom::GeometryFactory::~GeometryFactory”: 无法访问 protected 成员(在“geos::geom::GeometryFactory”类中声明)        E:\OSGRes\Download\OSGEarth\gwaldron-osgearth-2.8\src\osgEarthSymbology\GEOS.cpp        337        1        osgEarthSymbology
错误        159        error C2248: “geos::geom::GeometryFactory::GeometryFactory”: 无法访问 protected 成员(在“geos::geom::GeometryFactory”类中声明)        E:\OSGRes\Download\OSGEarth\gwaldron-osgearth-2.8\src\osgEarthSymbology\GEOS.cpp        219        1        osgEarthSymbology
错误        162        error C2248: “geos::geom::GeometryFactory::GeometryFactory”: 无法访问 protected 成员(在“geos::geom::GeometryFactory”类中声明)        E:\OSGRes\Download\OSGEarth\gwaldron-osgearth-2.8\src\osgEarthSymbology\GEOS.cpp        219        1        osgEarthSymbology


输出为:
..\..\..\..\gwaldron-osgearth-2.8\src\osgEarthSymbology\GEOS.cpp(219): error C2248: “geos::geom::GeometryFactory::GeometryFactory”: 无法访问 protected 成员(在“geos::geom::GeometryFactory”类中声明)
          E:\OSG\runtime\geos3.6.1\include\geos/geom/GeometryFactory.h(453) : 参见“geos::geom::GeometryFactory::GeometryFactory”的声明
          E:\OSG\runtime\geos3.6.1\include\geos/geom/GeometryFactory.h(67) : 参见“geos::geom::GeometryFactory”的声明
..\..\..\..\gwaldron-osgearth-2.8\src\osgEarthSymbology\GEOS.cpp(227): error C2248: “geos::geom::GeometryFactory::~GeometryFactory”: 无法访问 protected 成员(在“geos::geom::GeometryFactory”类中声明)
          E:\OSG\runtime\geos3.6.1\include\geos/geom/GeometryFactory.h(490) : 编译器已在此处生成“geos::geom::GeometryFactory::~GeometryFactory”
          E:\OSG\runtime\geos3.6.1\include\geos/geom/GeometryFactory.h(67) : 参见“geos::geom::GeometryFactory”的声明
..\..\..\..\gwaldron-osgearth-2.8\src\osgEarthSymbology\GEOS.cpp(337): error C2248: “geos::geom::GeometryFactory::~GeometryFactory”: 无法访问 protected 成员(在“geos::geom::GeometryFactory”类中声明)
          E:\OSG\runtime\geos3.6.1\include\geos/geom/GeometryFactory.h(490) : 编译器已在此处生成“geos::geom::GeometryFactory::~GeometryFactory”

          E:\OSG\runtime\geos3.6.1\include\geos/geom/GeometryFactory.h(67) : 参见“geos::geom::GeometryFactory”的声明



原来是geos库的版本问题,换一个老版本的库就没这个问题了

### 如何编译 osgEarth 2.8 并配置 C++ 开发环境 #### 配置开发环境 为了成功编译 `osgEarth`,需要先安装必要的依赖项并正确配置开发环境。以下是详细的说明: 1. **安装 OpenSceneGraph (OSG)** OSG 是 osgEarth 的基础框架之一。建议下载与 osgEarth 版本兼容的 OSG 源码,并按照官方文档完成编译和安装过程。通常情况下,推荐使用 OSG 3.4 或更高版本[^1]。 2. **安装 GDAL 和 PROJ 库** GDAL 提供地理空间数据处理功能,而 PROJ 则负责坐标转换支持。对于 osgEarth 2.8 来说,GDAL 建议使用 2.x.x 版本以避免过多的依赖问题[^2]。可以通过包管理工具(如 Homebrew、APT)或者手动编译来安装这些库。 3. **准备其他依赖项** 此外还需要 SQLite、Zlib 等常用库的支持。确保它们已经正确安装在系统中,并能够被 CMake 找到。 #### 编写 CMakeLists 文件 正确的 `CMakeLists.txt` 对于项目的顺利构建至关重要。下面是一个简单的例子用于演示如何设置项目结构以便链接 osgEarth 及其相关组件: ```cmake cmake_minimum_required(VERSION 3.10) project(MyOsgEarthApp) find_package(OSGEarth REQUIRED) find_package(OSG REQUIRED) add_executable(${PROJECT_NAME} earth.cpp) target_link_libraries( ${PROJECT_NAME} PRIVATE OSGEARTH::osgEarth OSGEARTH::osgEarthUtil OSG::osgDB OSG::osgViewer ) ``` 此脚本假设您已通过 `find_package()` 成功定位到了所需模块的位置;如果没有自动发现,则可能需要指定额外参数给 cmake 调用来帮助它找到具体位置[^1]。 #### 处理常见错误 如果遇到编译失败的情况,请检查以下几个方面: - 确认所有外部库都已被正确定位; - 如果某些头文件找不到,请核查 include directories 设置是否遗漏了任何一项; - 当动态加载共享对象出现问题时,记得调整 LD_LIBRARY_PATH 或同等机制让运行期也能访问所需的 so/dll 文件。 最后一步验证工作可以简单地执行命令行测试程序比如 `osgearth_version` 查看安装状况良好与否[^2]。 --- ### 示例代码片段 这里给出一个基本的应用实例展示怎样利用 osgEarth 显示地图场景: ```cpp #include <osgViewer/Viewer> #include <osgDB/ReadFile> #include <osgEarthUtil/EarthManipulator> int main() { auto viewer = new osgViewer::Viewer(); // 初始化地球控制器 auto manipulator = new osgEarth::Util::EarthManipulator; viewer->setCameraManipulator(manipulator); // 加载虚拟地球模型 viewer->setSceneData(osgDB::readNodeFile("simple.earth")); return viewer->run(); } ``` 以上代码展示了创建窗口视图器以及加载预定义好的 `.earth` 地形描述文件的过程[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值