Tôi đã triển khai một ứng dụng web có chứa mã sau.java.lang.UnsatisfiedLinkError: Thư viện gốc XXX.so đã được tải trong một trình nạp lớp khác
System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
Bây giờ, tôi đã triển khai một ứng dụng web khác có cùng mã. Khi nó cố gắng tải thư viện, nó ném lỗi sau.
Exception in thread "Thread-143" java.lang.UnsatisfiedLinkError:
Native Library /usr/lib/jni/libopencv_java248.so already loaded in
another classloader
Tôi muốn chạy cả hai ứng dụng này cùng một lúc.
Đến bây giờ những gì tôi đã cố gắng:
- thư viện Loaded trong một ứng dụng và bắt gặp trên ngoại lệ vào một ứng dụng khác
- lọ Removed từ cả ứng dụng và đưa opencv.jar vào classpath của Tomcat (tức là trong/usr/share/tomcat7/lib).
Nhưng không có đề xuất nào ở trên có thể làm được điều này?
Edit: cho tùy chọn hai,
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Dòng này hoạt động nhưng được trừ khi tôi thực sự sẽ sử dụng thư viện đó. Đó là khi tôi sau
Mat mat = Highgui.imread("/tmp/abc.png");
Và tôi nhận được ngoại lệ này
java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_1(Ljava/lang/String;)J
at org.opencv.highgui.Highgui.imread_1(Native Method)
at org.opencv.highgui.Highgui.imread(Highgui.java:362)
Số 2 nên đã hoạt động. Bạn chắc chắn rằng bạn đã xóa nó ở nơi khác và rằng không có một số jar khác trong webapp tìm cách tải lib? – user2543253
@ user2543253 Vui lòng kiểm tra câu hỏi đã chỉnh sửa của tôi. –
Bạn có thể kiểm tra nếu 'Highgui' được nạp bởi cùng một trình nạp lớp có thực hiện' loadLibrary' không? Nếu không, các phương thức gốc không được khởi tạo. – user2543253