Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Run on Raspberry Pi prompting errors:java.lang.UnsatisfiedLinkError: no jniopenblas_nolapack in java.library.path: /usr/java/packages/lib:/lib:/usr/lib #2001

Closed
visionki opened this issue Mar 24, 2023 · 18 comments
Assignees

Comments

@visionki
Copy link

I need to use JavaCV on my Raspberry Pi to take pictures, but my development environment is Windows.

The maven dependencies I introduced are:

        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.5.8</version>
        </dependency>

The code snippet is as follows:

      try (FrameGrabber grabber = new OpenCVFrameGrabber(0);
           OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage()){
         grabber.start();
         for (int i = 0; i < 10; i++) {
            Frame frame = grabber.grab();
            IplImage img = converter.convert(frame);
            opencv_imgcodecs.cvSaveImage(System.currentTimeMillis() + ".jpg", img);
         }
      } catch (FrameGrabber.Exception e) {
         throw new RuntimeException(e);
      }

This works fine on Windows, but when I use mvn package to package it and run it on Raspberry Pi, I get the java.lang.UnsatisfiedLinkError: no jniopenblas_nolapack in java.library.path: /usr/java/ packages/lib:/lib:/usr/lib error。

The full error is as follows:

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:32) ~[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

Is there a dependent library missing?

@visionki
Copy link
Author

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

@saudet
Copy link
Member

saudet commented Mar 24, 2023

Please set the "org.bytedeco.javacpp.logger.debug" system property to "true" to get more information on the console.

@zBo1997
Copy link

zBo1997 commented Mar 25, 2023

what's your JDK version?

@visionki
Copy link
Author

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?

@visionki
Copy link
Author

visionki commented Mar 25, 2023

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)

@saudet
Copy link
Member

saudet commented Mar 25, 2023

What do you get if you call Loader.getPlatform()? And what are the values of the "os.arch" and "os.name" system properties?

@visionki
Copy link
Author

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

@saudet
Copy link
Member

saudet commented Mar 25, 2023

I mean, what do you get if you call System.getProperty("os.arch") and System.getProperty("os.name") in Java?

@visionki
Copy link
Author

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

@saudet
Copy link
Member

saudet commented Mar 25, 2023

What about "java.vm.name", "sun.arch.abi", and "sun.boot.library.path"?

@visionki
Copy link
Author

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

@saudet
Copy link
Member

saudet commented Mar 25, 2023

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
Copy link
Author

@saudet Great! He is now working properly, thank you very much!

@saudet saudet added bug and removed help wanted labels Mar 25, 2023
@zBo1997
Copy link

zBo1997 commented Mar 25, 2023

@visionki hey! Could I get your contact information?

saudet added a commit to bytedeco/javacpp that referenced this issue Mar 25, 2023
…n JDK (issue bytedeco/javacv#2001)

 * Fix `Parser` ignoring `Info.skip` for enumerators that do not get translated (issue bytedeco/javacpp-presets#1315)
 * Fix `Parser` error on C++17 style namespace declarations containing `::` separators (issue #595)
@saudet
Copy link
Member

saudet commented Jun 6, 2023

Fix released with JavaCPP 1.5.9! Thanks for reporting

@highwayhu
Copy link

highwayhu commented Apr 15, 2024

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?

@saudet
Copy link
Member

saudet commented Apr 15, 2024

That sounds like something going awry with static initialization. Please try to call Loader.Detector.getPlatform() instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants