Một nền nhỏ: Tôi có một ứng dụng java cần nói chuyện với phần cứng của bên thứ ba trên mac. Họ đã cho tôi sdk nhưng nó không có trong Java. Vì vậy, tôi đang cố gắng để làm cho jnilib sẽ hoạt động như một cầu nối giữa ứng dụng java của tôi và SDK.Mac + jni + java
Vấn đề: Tôi đã thực hiện một jnilib mẫu nhỏ mà nói chuyện với SDK nhưng khi tôi cố gắng sử dụng nó trong chương trình java của tôi, tôi nhận được lỗi sau
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Users/john.doe/Desktop/eclipse/workspace/Lesson13_Jni_Smart7/bin/libSmartTest7.jnilib: Library not loaded: build/Release/SMARTResponseSDK.framework/Versions/A/SMARTResponseSDK Referenced from: /Users/john.doe/Desktop/eclipse/workspace/Lesson13_Jni_Smart7/bin/libSmartTest7.jnilib
Reason: image not found
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1827)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1742)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
at com.learning.lesson13.JniSmart7.<clinit>(JniSmart7.java:6)
Từ các lỗi có vẻ như tôi libSmartTest7.jnilib
đang tìm thư viện SMARTResponseSDK
.
Điều tôi đã thử Tôi biết thư viện SMARTResponseSDK
nằm trên máy Mac của tôi. Tôi đã thử sao chép nó vào thư mục làm việc của tôi trong nhật thực nhưng tôi vẫn nhận được lỗi. Tôi đã thử sử dụng -DJava.library.path
nhưng tôi vẫn gặp lỗi.
Bất kỳ ý tưởng nào về cách tiếp cận tốt nhất có thể là gì.
Trên OSX, thư viện phải được tìm thấy trong java.library.path hoặc biến môi trường DYLD_LIBRARY_PATH. Bạn cũng nên kiểm tra thư viện của mình để đảm bảo thư viện không sử dụng đường dẫn tuyệt đối cụ thể cho thư viện phụ thuộc (trừ khi nó ở vị trí được hệ thống cài đặt). – technomage
Xin cảm ơn lời cảm ơn của bạn. Tôi xin lỗi nhưng có vẻ như đó là lỗi của tôi. Có hai thư viện "SMARTResponseSDK". có vẻ như tôi đã sử dụng sai trong khi xây dựng jnilib của tôi. Tôi đã sử dụng "SMARTResponseSDK" khác và vấn đề dường như đã bị xóa. – user1216750
Bạn cũng có thể xem xét Rococoa, cho phép bạn tránh viết bất kỳ mã gốc nào và truy cập thư viện của bên thứ ba trực tiếp từ Java. – technomage