微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java.Lang.UnsatisfiedLinkError:'

如何解决Java.Lang.UnsatisfiedLinkError:'

我试图通过Java绑定模板在Xamarin.Android上使用OpenCv 4。这些是我已经完成的步骤: 0)我已经通过cmake和mingw64编译了opencv二进制文件以获得.jar和.a

  1. 我将.jar和静态库(.a)放在Xamarin Java绑定模板的Jars forlder中,并且我已经编译了模板。 1.a).jar Build Action是EmbeddedJar 1.b)libs Build Action是EmbeddednativeLibrary
  2. 我在Xamarin.Android项目中添加了对该模板的引用:opencv方法被正确识别!

但是,当我尝试执行时:

Mat Source = Imgcodecs.Imread(ImagePath,Imgcodecs.ImreadGrayscale);

我得到一个错误

java.lang.UnsatisfiedLinkError: 'No implementation found for long org.opencv.imgcodecs.Imgcodecs.imread_0(java.lang.String,int) (tried Java_org_opencv_imgcodecs_Imgcodecs_imread_10 and Java_org_opencv_imgcodecs_Imgcodecs_imread_10__Ljava_lang_String_2I)'

我认为方法名称可能不匹配,可能是由于Java解析错误所致。

我还尝试通过JavaSystem.LoadLibrary(“ LibraryNameWithoutinitialLib”)加载共享库来使用共享库(.so),但我有相同的错误:/

你知道为什么吗?

enter image description here

enter image description here

解决方法

您不能将静态库与Xamarin.Android链接,因为基于Xamarin / Mono NDK的运行时是静态的主条目可执行文件,并且不会按项目动态生成。如果不需要使用.jar / .aar高级包装器,则将需要使用运行时共享库​​,并为需要调用的导出函数定义DllImportAttribute条目。

Xamarin.Android通过标准的PInvoke机制支持使用本机库。

Using Native Libraries

Use C/C++ libraries with Xamarin

注意:开放源代码中有许多OpenCV C#包装器/ DllImport文件(即github搜索github)

注意:如果您使用的是第三方.jar / .aar,请确保它们使用的是OpenCV共享库,因此不需要gradle脚本将它们链接到基于NDK的Android应用中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。