shimat / opencvsharp

OpenCV wrapper for .NET
Apache License 2.0
5.22k stars 1.13k forks source link

Issue on arm64 #1593

Open DanieleNeo opened 11 months ago

DanieleNeo commented 11 months ago

Hi,

I used in past opencvsharp on armbian with several projects with success, now I'm using it on a orange pi3 lts board (with armbian 64 bit) and I have a problem

Unhandled exception. System.TypeInitializationException: The type initializer for 'OpenCvSharp.Internal.NativeMethods' threw an exception. ---> System.DllNotFoundException: Unable to load shared library 'OpenCvSharpExtern' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libOpenCvSharpExtern: cannot open shared object file: No such file or directory at OpenCvSharp.Internal.NativeMethods.redirectError(CvErrorCallback errCallback, IntPtr userdata, IntPtr& prevUserdata) at OpenCvSharp.Internal.ExceptionHandler.RegisterExceptionCallback() at OpenCvSharp.Internal.NativeMethods.LoadLibraries(IEnumerable 1 additionalPaths) at OpenCvSharp.Internal.NativeMethods..cctor() --- End of inner exception stack trace --- at OpenCvSharp.Internal.NativeMethods.videoio_VideoCapture_new1(IntPtr& returnValue) at OpenCvSharp.VideoCapture..ctor() at NS.RemoteFRN.Hardware.Camera.InitCamera() in C:\Users\daniele\source\repos\NS.RemoteFRN.Sever.Console\NS.RemoteFRN.Hardware\Camera.cs:line 277 at NS.RemoteFRN.Hardware.Camera._MqttClient_MessageReceived(String ClientID, Data Data) in C:\Users\daniele\source\repos\NS.RemoteFRN.Sever.Console\NS.RemoteFRN.Hardware\Camera.cs:line 46 at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_1(Object state) at System.Threading.QueueUserWorkItemCallbackDefaultContext.Execute() at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() at System.Threading.Thread.StartCallback()

this problem is caused because there is no OpenCvSharp4.runtime.linux-arm64 nuget package, and the OpenCvSharp4.runtime.linux-arm is not usable with arm64.

So i used this dockerfile, I build for platform linux/arm64 and copied resulting artefacts/libOpenCvSharpExtern.so under ./runtimes/linux-arm64/native folder, with no luck.

Yet the library doesn't seem to have missing dependencies..

daniele@orangepi3-lts:~/frn/runtimes/linux-arm64/native$ ldd libOpenCvSharpExtern.so linux-vdso.so.1 (0x0000ffffb22c1000) libtesseract.so.4 => /lib/aarch64-linux-gnu/libtesseract.so.4 (0x0000ffffb0260000) libgtk-x11-2.0.so.0 => /lib/aarch64-linux-gnu/libgtk-x11-2.0.so.0 (0x0000ffffafdd0000) libgdk-x11-2.0.so.0 => /lib/aarch64-linux-gnu/libgdk-x11-2.0.so.0 (0x0000ffffafd00000) libcairo.so.2 => /lib/aarch64-linux-gnu/libcairo.so.2 (0x0000ffffafbd0000) libgdk_pixbuf-2.0.so.0 => /lib/aarch64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x0000ffffafb90000) libgobject-2.0.so.0 => /lib/aarch64-linux-gnu/libgobject-2.0.so.0 (0x0000ffffafb10000) libglib-2.0.so.0 => /lib/aarch64-linux-gnu/libglib-2.0.so.0 (0x0000ffffaf9c0000) libdc1394.so.25 => /lib/aarch64-linux-gnu/libdc1394.so.25 (0x0000ffffaf930000) libavcodec.so.58 => /lib/aarch64-linux-gnu/libavcodec.so.58 (0x0000ffffae780000) libavformat.so.58 => /lib/aarch64-linux-gnu/libavformat.so.58 (0x0000ffffae4e0000) libavutil.so.56 => /lib/aarch64-linux-gnu/libavutil.so.56 (0x0000ffffae220000) libswscale.so.5 => /lib/aarch64-linux-gnu/libswscale.so.5 (0x0000ffffae190000) libjpeg.so.8 => /lib/aarch64-linux-gnu/libjpeg.so.8 (0x0000ffffae130000) libpng16.so.16 => /lib/aarch64-linux-gnu/libpng16.so.16 (0x0000ffffae0e0000) libtiff.so.5 => /lib/aarch64-linux-gnu/libtiff.so.5 (0x0000ffffae050000) libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000ffffae020000) libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000ffffaddf0000) libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffffadd50000) libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000ffffadd20000) libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffffadb70000) /lib/ld-linux-aarch64.so.1 (0x0000ffffb2288000) libarchive.so.13 => /lib/aarch64-linux-gnu/libarchive.so.13 (0x0000ffffada90000) liblept.so.5 => /lib/aarch64-linux-gnu/liblept.so.5 (0x0000ffffad7a0000) libgomp.so.1 => /lib/aarch64-linux-gnu/libgomp.so.1 (0x0000ffffad740000) libgmodule-2.0.so.0 => /lib/aarch64-linux-gnu/libgmodule-2.0.so.0 (0x0000ffffad720000) libpangocairo-1.0.so.0 => /lib/aarch64-linux-gnu/libpangocairo-1.0.so.0 (0x0000ffffad700000) libX11.so.6 => /lib/aarch64-linux-gnu/libX11.so.6 (0x0000ffffad5b0000) libXfixes.so.3 => /lib/aarch64-linux-gnu/libXfixes.so.3 (0x0000ffffad590000) libatk-1.0.so.0 => /lib/aarch64-linux-gnu/libatk-1.0.so.0 (0x0000ffffad550000) libgio-2.0.so.0 => /lib/aarch64-linux-gnu/libgio-2.0.so.0 (0x0000ffffad350000) libpangoft2-1.0.so.0 => /lib/aarch64-linux-gnu/libpangoft2-1.0.so.0 (0x0000ffffad320000) libpango-1.0.so.0 => /lib/aarch64-linux-gnu/libpango-1.0.so.0 (0x0000ffffad2a0000) libfontconfig.so.1 => /lib/aarch64-linux-gnu/libfontconfig.so.1 (0x0000ffffad240000) libXrender.so.1 => /lib/aarch64-linux-gnu/libXrender.so.1 (0x0000ffffad220000) libXinerama.so.1 => /lib/aarch64-linux-gnu/libXinerama.so.1 (0x0000ffffad200000) libXi.so.6 => /lib/aarch64-linux-gnu/libXi.so.6 (0x0000ffffad1d0000) libXrandr.so.2 => /lib/aarch64-linux-gnu/libXrandr.so.2 (0x0000ffffad1b0000) libXcursor.so.1 => /lib/aarch64-linux-gnu/libXcursor.so.1 (0x0000ffffad190000) libXcomposite.so.1 => /lib/aarch64-linux-gnu/libXcomposite.so.1 (0x0000ffffad170000) libXdamage.so.1 => /lib/aarch64-linux-gnu/libXdamage.so.1 (0x0000ffffad150000) libXext.so.6 => /lib/aarch64-linux-gnu/libXext.so.6 (0x0000ffffad120000) libpixman-1.so.0 => /lib/aarch64-linux-gnu/libpixman-1.so.0 (0x0000ffffad0a0000) libfreetype.so.6 => /lib/aarch64-linux-gnu/libfreetype.so.6 (0x0000ffffacfd0000) libxcb-shm.so.0 => /lib/aarch64-linux-gnu/libxcb-shm.so.0 (0x0000ffffacfb0000) libxcb.so.1 => /lib/aarch64-linux-gnu/libxcb.so.1 (0x0000ffffacf70000) libxcb-render.so.0 => /lib/aarch64-linux-gnu/libxcb-render.so.0 (0x0000ffffacf50000) libffi.so.8 => /lib/aarch64-linux-gnu/libffi.so.8 (0x0000ffffacf30000) libpcre.so.3 => /lib/aarch64-linux-gnu/libpcre.so.3 (0x0000ffffaceb0000) libraw1394.so.11 => /lib/aarch64-linux-gnu/libraw1394.so.11 (0x0000fffface90000) libusb-1.0.so.0 => /lib/aarch64-linux-gnu/libusb-1.0.so.0 (0x0000fffface60000) libswresample.so.3 => /lib/aarch64-linux-gnu/libswresample.so.3 (0x0000fffface30000) libvpx.so.7 => /lib/aarch64-linux-gnu/libvpx.so.7 (0x0000ffffacc00000) libwebpmux.so.3 => /lib/aarch64-linux-gnu/libwebpmux.so.3 (0x0000ffffacbe0000) libwebp.so.7 => /lib/aarch64-linux-gnu/libwebp.so.7 (0x0000ffffacb80000) liblzma.so.5 => /lib/aarch64-linux-gnu/liblzma.so.5 (0x0000ffffacb40000) libdav1d.so.5 => /lib/aarch64-linux-gnu/libdav1d.so.5 (0x0000ffffaca40000) librsvg-2.so.2 => /lib/aarch64-linux-gnu/librsvg-2.so.2 (0x0000ffffac090000) libzvbi.so.0 => /lib/aarch64-linux-gnu/libzvbi.so.0 (0x0000ffffabff0000) libsnappy.so.1 => /lib/aarch64-linux-gnu/libsnappy.so.1 (0x0000ffffabfd0000) libaom.so.3 => /lib/aarch64-linux-gnu/libaom.so.3 (0x0000ffffabc80000) libcodec2.so.1.0 => /lib/aarch64-linux-gnu/libcodec2.so.1.0 (0x0000ffffaadc0000) libgsm.so.1 => /lib/aarch64-linux-gnu/libgsm.so.1 (0x0000ffffaada0000) libmp3lame.so.0 => /lib/aarch64-linux-gnu/libmp3lame.so.0 (0x0000ffffaad20000) libopenjp2.so.7 => /lib/aarch64-linux-gnu/libopenjp2.so.7 (0x0000ffffaacb0000) libopus.so.0 => /lib/aarch64-linux-gnu/libopus.so.0 (0x0000ffffaac40000) libshine.so.3 => /lib/aarch64-linux-gnu/libshine.so.3 (0x0000ffffaac20000) libspeex.so.1 => /lib/aarch64-linux-gnu/libspeex.so.1 (0x0000ffffaabf0000) libtheoraenc.so.1 => /lib/aarch64-linux-gnu/libtheoraenc.so.1 (0x0000ffffaabb0000) libtheoradec.so.1 => /lib/aarch64-linux-gnu/libtheoradec.so.1 (0x0000ffffaab80000) libtwolame.so.0 => /lib/aarch64-linux-gnu/libtwolame.so.0 (0x0000ffffaab40000) libvorbis.so.0 => /lib/aarch64-linux-gnu/libvorbis.so.0 (0x0000ffffaab00000) libvorbisenc.so.2 => /lib/aarch64-linux-gnu/libvorbisenc.so.2 (0x0000ffffaaa40000) libx264.so.163 => /lib/aarch64-linux-gnu/libx264.so.163 (0x0000ffffaa7f0000) libx265.so.199 => /lib/aarch64-linux-gnu/libx265.so.199 (0x0000ffffaa530000) libxvidcore.so.4 => /lib/aarch64-linux-gnu/libxvidcore.so.4 (0x0000ffffaa430000) libva.so.2 => /lib/aarch64-linux-gnu/libva.so.2 (0x0000ffffaa3f0000) libxml2.so.2 => /lib/aarch64-linux-gnu/libxml2.so.2 (0x0000ffffaa200000) libbz2.so.1.0 => /lib/aarch64-linux-gnu/libbz2.so.1.0 (0x0000ffffaa1d0000) libgme.so.0 => /lib/aarch64-linux-gnu/libgme.so.0 (0x0000ffffaa170000) libopenmpt.so.0 => /lib/aarch64-linux-gnu/libopenmpt.so.0 (0x0000ffffa9fc0000) libchromaprint.so.1 => /lib/aarch64-linux-gnu/libchromaprint.so.1 (0x0000ffffa9fa0000) libbluray.so.2 => /lib/aarch64-linux-gnu/libbluray.so.2 (0x0000ffffa9f30000) libgnutls.so.30 => /lib/aarch64-linux-gnu/libgnutls.so.30 (0x0000ffffa9d30000) librabbitmq.so.4 => /lib/aarch64-linux-gnu/librabbitmq.so.4 (0x0000ffffa9d00000) libsrt-gnutls.so.1.4 => /lib/aarch64-linux-gnu/libsrt-gnutls.so.1.4 (0x0000ffffa9c40000) libssh-gcrypt.so.4 => /lib/aarch64-linux-gnu/libssh-gcrypt.so.4 (0x0000ffffa9ba0000) libzmq.so.5 => /lib/aarch64-linux-gnu/libzmq.so.5 (0x0000ffffa9b00000) libva-drm.so.2 => /lib/aarch64-linux-gnu/libva-drm.so.2 (0x0000ffffa9ae0000) libva-x11.so.2 => /lib/aarch64-linux-gnu/libva-x11.so.2 (0x0000ffffa9ac0000) libvdpau.so.1 => /lib/aarch64-linux-gnu/libvdpau.so.1 (0x0000ffffa9aa0000) libdrm.so.2 => /lib/aarch64-linux-gnu/libdrm.so.2 (0x0000ffffa9a70000) libOpenCL.so.1 => /lib/aarch64-linux-gnu/libOpenCL.so.1 (0x0000ffffa9a50000) libzstd.so.1 => /lib/aarch64-linux-gnu/libzstd.so.1 (0x0000ffffa9980000) libjbig.so.0 => /lib/aarch64-linux-gnu/libjbig.so.0 (0x0000ffffa9960000) libdeflate.so.0 => /lib/aarch64-linux-gnu/libdeflate.so.0 (0x0000ffffa9930000) libnettle.so.8 => /lib/aarch64-linux-gnu/libnettle.so.8 (0x0000ffffa98d0000) libacl.so.1 => /lib/aarch64-linux-gnu/libacl.so.1 (0x0000ffffa98b0000) liblz4.so.1 => /lib/aarch64-linux-gnu/liblz4.so.1 (0x0000ffffa9880000) libgif.so.7 => /lib/aarch64-linux-gnu/libgif.so.7 (0x0000ffffa9860000) libharfbuzz.so.0 => /lib/aarch64-linux-gnu/libharfbuzz.so.0 (0x0000ffffa9780000) libmount.so.1 => /lib/aarch64-linux-gnu/libmount.so.1 (0x0000ffffa9720000) libselinux.so.1 => /lib/aarch64-linux-gnu/libselinux.so.1 (0x0000ffffa96e0000) libfribidi.so.0 => /lib/aarch64-linux-gnu/libfribidi.so.0 (0x0000ffffa96b0000) libthai.so.0 => /lib/aarch64-linux-gnu/libthai.so.0 (0x0000ffffa9690000) libexpat.so.1 => /lib/aarch64-linux-gnu/libexpat.so.1 (0x0000ffffa9650000) libuuid.so.1 => /lib/aarch64-linux-gnu/libuuid.so.1 (0x0000ffffa9630000) libbrotlidec.so.1 => /lib/aarch64-linux-gnu/libbrotlidec.so.1 (0x0000ffffa9610000) libXau.so.6 => /lib/aarch64-linux-gnu/libXau.so.6 (0x0000ffffa95f0000) libXdmcp.so.6 => /lib/aarch64-linux-gnu/libXdmcp.so.6 (0x0000ffffa95d0000) libudev.so.1 => /lib/aarch64-linux-gnu/libudev.so.1 (0x0000ffffa9590000) libsoxr.so.0 => /lib/aarch64-linux-gnu/libsoxr.so.0 (0x0000ffffa9520000) libcairo-gobject.so.2 => /lib/aarch64-linux-gnu/libcairo-gobject.so.2 (0x0000ffffa9500000) libogg.so.0 => /lib/aarch64-linux-gnu/libogg.so.0 (0x0000ffffa94e0000) libnuma.so.1 => /lib/aarch64-linux-gnu/libnuma.so.1 (0x0000ffffa94b0000) libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffffa9490000) libicuuc.so.70 => /lib/aarch64-linux-gnu/libicuuc.so.70 (0x0000ffffa9280000) libmpg123.so.0 => /lib/aarch64-linux-gnu/libmpg123.so.0 (0x0000ffffa9220000) libvorbisfile.so.3 => /lib/aarch64-linux-gnu/libvorbisfile.so.3 (0x0000ffffa9200000) libudfread.so.0 => /lib/aarch64-linux-gnu/libudfread.so.0 (0x0000ffffa91e0000) libp11-kit.so.0 => /lib/aarch64-linux-gnu/libp11-kit.so.0 (0x0000ffffa9090000) libidn2.so.0 => /lib/aarch64-linux-gnu/libidn2.so.0 (0x0000ffffa9060000) libunistring.so.2 => /lib/aarch64-linux-gnu/libunistring.so.2 (0x0000ffffa8ea0000) libtasn1.so.6 => /lib/aarch64-linux-gnu/libtasn1.so.6 (0x0000ffffa8e70000) libhogweed.so.6 => /lib/aarch64-linux-gnu/libhogweed.so.6 (0x0000ffffa8e10000) libgmp.so.10 => /lib/aarch64-linux-gnu/libgmp.so.10 (0x0000ffffa8d80000) libssl.so.3 => /lib/aarch64-linux-gnu/libssl.so.3 (0x0000ffffa8cd0000) libcrypto.so.3 => /lib/aarch64-linux-gnu/libcrypto.so.3 (0x0000ffffa88e0000) libgcrypt.so.20 => /lib/aarch64-linux-gnu/libgcrypt.so.20 (0x0000ffffa87f0000) libgpg-error.so.0 => /lib/aarch64-linux-gnu/libgpg-error.so.0 (0x0000ffffa87b0000) libgssapi_krb5.so.2 => /lib/aarch64-linux-gnu/libgssapi_krb5.so.2 (0x0000ffffa8750000) libbsd.so.0 => /lib/aarch64-linux-gnu/libbsd.so.0 (0x0000ffffa8720000) libsodium.so.23 => /lib/aarch64-linux-gnu/libsodium.so.23 (0x0000ffffa86d0000) libpgm-5.3.so.0 => /lib/aarch64-linux-gnu/libpgm-5.3.so.0 (0x0000ffffa8670000) libnorm.so.1 => /lib/aarch64-linux-gnu/libnorm.so.1 (0x0000ffffa8530000) libgraphite2.so.3 => /lib/aarch64-linux-gnu/libgraphite2.so.3 (0x0000ffffa8500000) libblkid.so.1 => /lib/aarch64-linux-gnu/libblkid.so.1 (0x0000ffffa84b0000) libpcre2-8.so.0 => /lib/aarch64-linux-gnu/libpcre2-8.so.0 (0x0000ffffa8410000) libdatrie.so.1 => /lib/aarch64-linux-gnu/libdatrie.so.1 (0x0000ffffa83f0000) libbrotlicommon.so.1 => /lib/aarch64-linux-gnu/libbrotlicommon.so.1 (0x0000ffffa83b0000) libicudata.so.70 => /lib/aarch64-linux-gnu/libicudata.so.70 (0x0000ffffa6780000) libkrb5.so.3 => /lib/aarch64-linux-gnu/libkrb5.so.3 (0x0000ffffa66a0000) libk5crypto.so.3 => /lib/aarch64-linux-gnu/libk5crypto.so.3 (0x0000ffffa6660000) libcom_err.so.2 => /lib/aarch64-linux-gnu/libcom_err.so.2 (0x0000ffffa6640000) libkrb5support.so.0 => /lib/aarch64-linux-gnu/libkrb5support.so.0 (0x0000ffffa6620000) libmd.so.0 => /lib/aarch64-linux-gnu/libmd.so.0 (0x0000ffffa6600000) libkeyutils.so.1 => /lib/aarch64-linux-gnu/libkeyutils.so.1 (0x0000ffffa65e0000) libresolv.so.2 => /lib/aarch64-linux-gnu/libresolv.so.2 (0x0000ffffa65b0000)

Some help would be welcome...

Thanks in advance, Daniele.

DanieleNeo commented 11 months ago

@shimat can you help me?

sdcb commented 9 months ago

can you try my dockerfile, it's confirmed working in my orangepi4-lts, it's arm64 based RK3399, should similar to yours. https://github.com/shimat/opencvsharp/issues/1592#issuecomment-1727772109

sdcb commented 7 months ago

Hey @DanieleNeo , please try my self-compiled OpenCvSharp4 runtime as following, it's a mini runtime, only provided core, imgcodec, imgproc modules, I tested in my orangepi4-lts, it's an ARM64 RK3399 chip, it just works.

Id Version Size OS Arch
Sdcb.OpenCvSharp4.mini.runtime.centos.7-arm64 NuGet 3.23MB CentOS 7 ARM64
Sdcb.OpenCvSharp4.mini.runtime.centos.7-x64 NuGet 16.75MB CentOS 7 x64
Sdcb.OpenCvSharp4.mini.runtime.debian.11-arm64 NuGet 4.05MB Debian 11 ARM64
Sdcb.OpenCvSharp4.mini.runtime.debian.11-x64 NuGet 18.13MB Debian 11 x64
Sdcb.OpenCvSharp4.mini.runtime.debian.12-arm64 NuGet 4.18MB Debian 12 ARM64
Sdcb.OpenCvSharp4.mini.runtime.debian.12-x64 NuGet 17.47MB Debian 12 x64
Sdcb.OpenCvSharp4.mini.runtime.ubuntu.22.04-arm64 NuGet 4.18MB Ubuntu 22.04 ARM64
Sdcb.OpenCvSharp4.mini.runtime.ubuntu.22.04-x64 NuGet 17.47MB Ubuntu 22.04 x64
Sdcb.OpenCvSharp4.mini.runtime.android-arm64 NuGet 4.04MB Android ARM64