2012-02-17 8 views
5

少し背景: 私はMac上でサードパーティのハードウェアと話す必要があるJavaアプリケーションを持っています。彼らは私にsdkを与えましたが、Javaではありません。そこで私は、JavaアプリケーションとSDKの間のブリッジとして機能するjnilibを作ろうとしています。Mac + jni + java

問題: 私はSDKに話し小さなサンプルjnilibを作ったが、私は私のJavaプログラムでそれを使用しようとすると、私はそれが私のように見えるのエラーから次のエラー

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) 

を取得libSmartTest7.jnilibはライブラリSMARTResponseSDKを探しています。

私が試したこと 私はどこのライブラリSMARTResponseSDKが私のMacにあるのか知っています。私は日食で私の作業フォルダにそれをコピーしようとしたが、私はまだエラーが発生します。私は-DJava.library.pathを使ってみましたが、まだエラーが出ます。

可能な限り最良のアプローチについて考えてください。

+0

OSXでは、ライブラリはjava.library.pathまたはDYLD_LIBRARY_PATH環境変数のいずれかになければなりません。また、ライブラリーをチェックして、依存ライブラリーの特定の絶対パスを使用していないことを確認する必要があります(システムがインストールされている場所にない場合)。 – technomage

+0

こんにちは、ありがとうございます。申し訳ありませんが、それは私の間違いのようです。 2つの「SMARTResponseSDK」ライブラリがありました。私のjnilibをビルドしている間に間違ったものを使用したように見えます。私は他の "SMARTResponseSDK"を使用し、問題は解決されているようです。 – user1216750

+0

さらに、ネイティブコードの作成を避け、Javaから直接サードパーティライブラリにアクセスできるようにするRococoaを検討することもできます。 – technomage

答えて

0

JNIコード内に入ると、java.library.pathが指しているものは問題になりません。

あなたはJNIコードの中になったら、あなたが行うことができ、すべてのライブラリがLD_LIBRARY_PATH/DYLD_LIBRARY_PATHを経由してあなたのコードに表示されている、またはあなたが動的に好きな場所から自分のライブラリファイルをロードできることを確認することです。

だから、あなたのために、私はここで見てみることをお勧め:

JNIライブラリを構築中にコンパイルフラグを使用して、rpathを使用することもできます。