我正在构建一个 API,它通过 C/C++ 调用本机操作。我创建了一个 JNI 项目并jnilib
使用以下参数构建了它:
g++ -dynamiclib -rpath @loader_path -F /Users/nstuart/Downloads/myo-sdk -framework myo -framework JavaVM -o libmyo.jnilib *.o
我试图让我的 API 是自包含的,所以所有的库都在我的 /src/main/resources 中,我只是将它们复制到一个临时目录,然后再设置java.library.path
并从那里加载我的 JNI 库。我已经让它在 Windows 上工作,因为我只需要我的 JNI DLL 和另一个我也可以复制的 DLL。
当我在 Mac 上尝试这个时,我遇到了问题:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /private/var/folders/sf/3_7c7p452dq9jt_39yx76cn55rd8xh/T/libmyo.jnilib: dlopen(/private/var/folders/sf/3_7c7p452dq9jt_39yx76cn55rd8xh/T/libmyo.jnilib, 1): Library not loaded: @rpath/myo.framework/Versions/A/myo
Referenced from: /private/var/folders/sf/3_7c7p452dq9jt_39yx76cn55rd8xh/T/libmyo.jnilib
Reason: image not found
我认为这是因为我的@rpath
设置不正确,我想知道设置它的“正确”方式。从java的角度来看,在哪里@rpath
?如果是相对的,或者在loader_path
某个位置,那在哪里?我希望能够在运行时设置它,这样我就可以复制我的库文件,然后指向程序所在的位置。
在Java中,我如何确定:@rpath
?loader_path
? 从哪里加载依赖框架?