Qt5.9.1集成GDAL库报错:‘Open’不是OGRSFDriverRegistrar的成员
解决GDAL编译错误:'Open' is not a member of 'OGRSFDriverRegistrar'
你这是踩了GDAL版本API变更的坑啦!这个报错的核心原因是:你当前使用的GDAL版本(大概率是2.x及以上)里,OGRSFDriverRegistrar::Open这个静态方法已经被废弃或移除,取而代之的是更简洁易用的新API。
快速修复代码
直接把你原来的数据源打开逻辑替换成下面的写法即可:
#include <QCoreApplication> #include <QFile> #include <cstdlib> // 确保exit函数能正常使用 #include "ogrsf_frmts.h" int main(int argc, char *argv[]) { OGRRegisterAll(); OGRDataSource *source; // 用OGROpen替代旧的OGRSFDriverRegistrar::Open source = OGROpen("<path to s57 file>", FALSE, NULL); if( source == NULL ) { printf( "Open failed.\n" ); exit( 1 ); } // 记得程序结束前释放数据源资源,避免内存泄漏 OGRDataSource::DestroyDataSource(source); return 0; }
额外注意事项
- 确认GDAL版本:在终端输入
gdal-config --version就能查看系统安装的GDAL版本,2.x及以上版本都支持OGROpen。 - Qt项目配置:确保你的
.pro文件正确链接了GDAL库,Ubuntu 16.10默认安装的话可以这么写:
路径可以根据实际安装位置调整。INCLUDEPATH += /usr/include/gdal LIBS += -L/usr/lib -lgdal - 进阶选择:如果需要设置打开数据源的额外参数(比如指定驱动、读写权限等),可以用功能更全的
GDALOpenEx函数,需要额外包含gdal_utils.h头文件。
内容的提问来源于stack exchange,提问作者RTG
相关产品推荐
相关产品推荐

