Closed visionki closed 1 year ago
I've tried maven direct mvn package
packaging and platform specific packaging mvn -Djavacpp.platform=linux-armhf -Djavacpp.arch=arm package
, but both have the same error
Please set the "org.bytedeco.javacpp.logger.debug" system property to "true" to get more information on the console.
what's your JDK version?
Please set the "org.bytedeco.javacpp.logger.debug" system property to "true" to get more information on the console.
The console I get after using System.setProperty("org.bytedeco.javacpp.logger.debug", "true");
is as follows:
# java -jar camera.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.5)
2023-03-25T13:45:18.308+08:00 INFO 5669 --- [ main] com.axon.camera.CameraApplication : Starting CameraApplication v0.0.1-SNAPSHOT using Java 17.0.6 with PID 5669 (/home/emily/server/camera/camera.jar started by emily in /home/emily/server/camera)
2023-03-25T13:45:18.319+08:00 INFO 5669 --- [ main] com.axon.camera.CameraApplication : No active profile set, falling back to 1 default profile: "default"
2023-03-25T13:45:21.400+08:00 INFO 5669 --- [ main] com.axon.camera.CameraApplication : Started CameraApplication in 5.289 seconds (process running for 8.69)
2023-03-25T13:45:21.421+08:00 INFO 5669 --- [ main] com.axon.camera.StartService : 开始加载
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.javacpp.Loader
Debug: Loading library jnijavacpp
Debug: Failed to load for jnijavacpp: java.lang.UnsatisfiedLinkError: no jnijavacpp in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
Debug: Could not load Loader: java.lang.UnsatisfiedLinkError: no jnijavacpp in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading class org.bytedeco.javacpp.presets.javacpp
Debug: Loading class org.bytedeco.openblas.global.openblas_nolapack
Debug: Loading library gcc_s
Debug: Failed to load for gcc_s@.1: java.lang.UnsatisfiedLinkError: no gcc_s in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
Debug: Loading library quadmath
Debug: Failed to load for quadmath@.0: java.lang.UnsatisfiedLinkError: no quadmath in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
Debug: Loading library gfortran
Debug: Failed to load for gfortran@.5: java.lang.UnsatisfiedLinkError: no gfortran in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
Debug: Loading library gfortran
Debug: Failed to load for gfortran@.4: java.lang.UnsatisfiedLinkError: no gfortran in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
Debug: Loading library gfortran
Debug: Failed to load for gfortran@.3: java.lang.UnsatisfiedLinkError: no gfortran in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
Debug: Loading library openblas
Debug: Failed to load for openblas@.0#openblas_nolapack@.0: java.lang.UnsatisfiedLinkError: no openblas in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
Debug: Loading library openblas_nolapack
Debug: Failed to load for openblas_nolapack@.0: java.lang.UnsatisfiedLinkError: no openblas_nolapack in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
Debug: Loading library jniopenblas_nolapack
Debug: Failed to load for jniopenblas_nolapack: java.lang.UnsatisfiedLinkError: no jniopenblas_nolapack in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
2023-03-25T13:45:22.427+08:00 INFO 5669 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger :
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-03-25T13:45:22.551+08:00 ERROR 5669 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.UnsatisfiedLinkError: no jniopenblas_nolapack in java.library.path: /usr/java/packages/lib:/lib:/usr/lib
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2429) ~[na:na]
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818) ~[na:na]
at java.base/java.lang.System.loadLibrary(System.java:1989) ~[na:na]
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1825) ~[javacpp-1.5.8.jar!/:1.5.8]
at org.bytedeco.javacpp.Loader.load(Loader.java:1416) ~[javacpp-1.5.8.jar!/:1.5.8]
at org.bytedeco.javacpp.Loader.load(Loader.java:1227) ~[javacpp-1.5.8.jar!/:1.5.8]
at org.bytedeco.javacpp.Loader.load(Loader.java:1203) ~[javacpp-1.5.8.jar!/:1.5.8]
at org.bytedeco.openblas.global.openblas_nolapack.<clinit>(openblas_nolapack.java:12) ~[openblas-0.3.21-1.5.8.jar!/:0.3.21-1.5.8]
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:467) ~[na:na]
at org.bytedeco.javacpp.Loader.load(Loader.java:1282) ~[javacpp-1.5.8.jar!/:1.5.8]
at org.bytedeco.javacpp.Loader.load(Loader.java:1227) ~[javacpp-1.5.8.jar!/:1.5.8]
at org.bytedeco.javacpp.Loader.load(Loader.java:1219) ~[javacpp-1.5.8.jar!/:1.5.8]
at org.bytedeco.javacv.OpenCVFrameConverter.<clinit>(OpenCVFrameConverter.java:43) ~[javacv-1.5.8.jar!/:1.5.8]
at org.bytedeco.javacv.OpenCVFrameGrabber.<init>(OpenCVFrameGrabber.java:95) ~[javacv-1.5.8.jar!/:1.5.8]
at com.axon.camera.StartService.run(StartService.java:33) ~[classes!/:0.0.1-SNAPSHOT]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:760) ~[spring-boot-3.0.5.jar!/:3.0.5]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:750) ~[spring-boot-3.0.5.jar!/:3.0.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:317) ~[spring-boot-3.0.5.jar!/:3.0.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[spring-boot-3.0.5.jar!/:3.0.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[spring-boot-3.0.5.jar!/:3.0.5]
at com.axon.camera.CameraApplication.main(CameraApplication.java:13) ~[classes!/:0.0.1-SNAPSHOT]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[camera.jar:0.0.1-SNAPSHOT]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:95) ~[camera.jar:0.0.1-SNAPSHOT]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[camera.jar:0.0.1-SNAPSHOT]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) ~[camera.jar:0.0.1-SNAPSHOT]
Caused by: java.lang.UnsatisfiedLinkError: Could not find jniopenblas_nolapack in class, module, and library paths.
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1792) ~[javacpp-1.5.8.jar!/:1.5.8]
... 26 common frames omitted
I understand that JavaCV depends on the OpenCV library and FFmpeg, and I already have them installed on the Raspberry Pi, are there any dependencies I'm missing?
what's your JDK version?
I am using openjdk 17
# java -version
openjdk version "17.0.6" 2023-01-17
OpenJDK Runtime Environment Temurin-17.0.6+10 (build 17.0.6+10)
OpenJDK Server VM Temurin-17.0.6+10 (build 17.0.6+10, mixed mode, sharing)
What do you get if you call Loader.getPlatform()? And what are the values of the "os.arch" and "os.name" system properties?
What do you get if you call Loader.getPlatform()? And what are the values of the "os.arch" and "os.name" system properties?
The call to Loader.getPlatform()
return linux-arm
。
Here is the information about the system:
$ uname -a
Linux raspberrypi 6.1.19-v8+ #1637 SMP PREEMPT Tue Mar 14 11:11:47 GMT 2023 aarch64 GNU/Linux
$ cat /proc/version
Linux version 6.1.19-v8+ (dom@buildbot) (aarch64-linux-gnu-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1637 SMP PREEMPT Tue Mar 14 11:11:47 GMT 2023
I mean, what do you get if you call System.getProperty("os.arch") and System.getProperty("os.name") in Java?
I mean, what do you get if you call System.getProperty("os.arch") and System.getProperty("os.name") in Java?
The printout reads:
os.arch: arm
os.name: Linux
What about "java.vm.name", "sun.arch.abi", and "sun.boot.library.path"?
What about "java.vm.name", "sun.arch.abi", and "sun.boot.library.path"?
java.vm.name: OpenJDK Server VM
sun.arch.abi:
sun.boot.library.path: /usr/lib/jvm/temurin-17-jdk-armhf/lib
where sun.arch.abi
does not print out the contents
Ah, ok, so you are using a 32-bit JDK. We'll need to update the hack from @vb216 that checks for "openjdk-armhf" in "sun.boot.library.path" to just "armhf", I guess. For now, you can work around that by setting the "org.bytedeco.javacpp.platform" system property to "linux-armhf".
@saudet Great! He is now working properly, thank you very much!
@visionki hey! Could I get your contact information?
Fix released with JavaCPP 1.5.9! Thanks for reporting
Ah, ok, so you are using a 32-bit JDK. We'll need to update the hack from @vb216 that checks for "openjdk-armhf" in "sun.boot.library.path" to just "armhf", I guess. For now, you can work around that by setting the "org.bytedeco.javacpp.platform" system property to "linux-armhf".
@visionki hi, I'm experiencing the same issue. My environment variable is
javacpp platform: linux-x86_64 os.arch: amd64 os.name: Linux sun.boot.library.path: /opt/taobao/install/ajdk-8_10_15_fp11-b50-dep/jre/lib/amd64 org.bytedeco.javacpp.platform: null
. Could you kindly advise on how to resolve this?
That sounds like something going awry with static initialization. Please try to call Loader.Detector.getPlatform() instead.
There are few other openblas os related jars, like [openblas-0.3.26-1.5.10-linux-x86_64.jar, openblas-0.3.26-1.5.10-macosx-arm64.jar, openblas-0.3.26-1.5.10-macosx-x86_64.jar]. By adding above respective os jar along with normal openblas jar, will resolve the issue.
I need to use JavaCV on my Raspberry Pi to take pictures, but my development environment is Windows.
The maven dependencies I introduced are:
The code snippet is as follows:
This works fine on Windows, but when I use
mvn package
to package it and run it on Raspberry Pi, I get thejava.lang.UnsatisfiedLinkError: no jniopenblas_nolapack in java.library.path: /usr/java/ packages/lib:/lib:/usr/lib
error。The full error is as follows:
Is there a dependent library missing?