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

GIS-gdal-java.lang.NoSuchMethodError

背景概述

这段时间使用gdal的时候,出现了一个找不到方法的的问题,具体报错内容如下:

java.lang.NoSuchMethodError: 'int org.gdal.gdal.Dataset.FlushCache()'at it.geosolutions.imageio.gdalframework.GDALImageWriter.write(GDALImageWriter.java:357)

问题解决

通过定位,这个错误是Dataset报出来的,我们知道对GDAL的调用最终要走到native,具体方法定义下:

// Dataset 中的方法public void FlushCache() {gdalJNI.Dataset_FlushCache(swigCPtr, this);}
// native 方法
public final static native void Dataset_FlushCache(long jarg1, Dataset jarg1_);

我们可以看到,它最终是要去调用一个void的方法。由于我本地用的gdal是3.9.0

ldd /usr/lib/x86_64-linux-gnu/libgdalalljni.so | grep gdal
# 结果为 libgdal.so.39 或 libgdal.so.3.9.x

在3.9的时候c++的方法FlushCache的返回值已经被修改了,返回的是一个int ,这样在调用的时候JVM 在链接 JNI 方法时发现签名不匹配,我需要的是一个void方法,找到的确实一个int,我没有int方法与之匹配,所以就爆出了上面这个错误。
这里可能存在一些误解,我们可能会认为难道不是应该报错java.lang.NoSuchMethodError: ‘void org.gdal.gdal.Dataset.FlushCache()’ 因为是这个方法找不到,这里的机制不是这样的,我们看下面的对应关系:

层级版本FlushCache() 定义返回类型
Java 层 (gdal.jar)3.2.0public native void FlushCache();void
底 层 (libgdalalljni.so)3.9.0JNIEXPORT void JNICALL Java_org_gdal_gdal_Dataset_FlushCacheint

当 JVM 加载 gdal.jar 时,这个类有个:

void org.gdal.gdal.Dataset.FlushCache()

gdalJNI 是一个java类,里面定义对应的native方法,也就是去c++找一个void 的方法:

 public final static native void Dataset_FlushCache(long jarg1, Dataset jarg1_);

但是我们在最终的c++层面libgdalalljni.so中只有int 类型方法,我们JVM层没有对应的int org.gdal.gdal.Dataset.FlushCache() 与之对应,所以报错java.lang.NoSuchMethodError: ‘int org.gdal.gdal.Dataset.FlushCache()’,所以这里是以底层为准。

http://www.dtcms.com/a/582730.html

相关文章:

  • 注册安全工程师考试科目南京seo顾问
  • 省品牌建设联合会网站关键词查询
  • PsSuspend(7.23):无损挂起与恢复指定进程——精准“冻住”故障现场
  • 台州网站设计公司网站推广公司官网
  • 【LLaVA-NeXT】请问,为什么“Stderr显示是N/A”的信息呢
  • 二级域名做网站好不好2024房地产彻底结束
  • 网站建设动态页面修改删除广州网站优化地址
  • “十五五规划”智慧养老新图景:科技如何让晚年更温暖
  • 好看云在线网站模板下载 迅雷下载 迅雷下载地址花都网络推广seo公司
  • C语言--static与extern关键字
  • 科迪兔网站建设中国室内设计网站
  • 成都高标建设有限公司官方网站相亲网站透露自己做理财的女生
  • 安全与认证体系
  • 网站配色教程禁用wordpress编辑器
  • 北京门户网站嵌入式软件开发流程图
  • docker 搭建私有仓库,推送并拉取
  • 备案网站名称重复pc网站建设费用
  • 人证查验一体机:守护医院产房安全
  • 自建网站经营者例子遵义北京网站建设
  • 网站建设好后打开是目录文件树莓派搭建wordpress
  • Java 并发编程 - Delay(Delayed 概述、Delayed 实现、Delayed 使用、Delay 缓存实现、Delayed 延迟获取数据实现)
  • 深圳专业网站优化公司报价线上广告投放收费标准
  • 如何建网站服务器广州贸易网站
  • 单板电源设计
  • 个人备案网站 内容企业网站 空间
  • PVE 9 显卡直通 外显 一个案例
  • h5是什么网站上面做的后端开发工作内容
  • 用滑动窗口法降噪
  • 网站建设与运营意义商标设计图片
  • 网站模板下载软件成都网站建设服务商