2012-01-27 12 views
3

私はJOGLを使用するJavaプロジェクトを使用しているため、プラットフォームごとに異なるネイティブライブラリを組み込む必要があります。今私は適切なライブラリを自動的に選択するようにEclipseプロジェクトを設定したいと思う。 .classpathファイルでは、あなたがネイティブの場所を指定することができます乗算classpathentriesは、ネイティブの場所を指定した場合異なるプラットフォーム用のネイティブライブラリを持つJavaプロジェクト

<classpathentry kind="lib" path="lib/jogl/jar/jogl.all.jar"> 
    <attributes> 
     <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="de.yogularm.desktop/lib/jogl/windows-amd64"/> 
    </attributes> 
</classpathentry> 

を、Eclipseはまた、他のプラットフォーム用のライブラリをロードしようと失敗します。

eclipseでディレクトリを選択する方法を教えてください。私はプロジェクトを共有し、できるだけ簡単に他の開発者のためのセットアップをしたいと思います。

+0

これを試しましたか?http://stackoverflow.com/questions/3618425/how-to-configure-eclipse-project-to-compile-both-on-windows-and-linux? – Viruzzo

+0

良い選択肢でしょうが、64ビットと32ビットの両方のシステムに対応していません。 – Yogu

答えて

4

あなたは、いくつかの.classpathファイル(.classpath_Windowsなど.classpath_Linux)を作成し、必要なバージョン(勝利/林/マック)へのシンボリックリンクを作成することができるという名前の「.classpath」
問題がwhan表示されます、あなたがしたいです.classpath_XXXXXXXの中のエントリを変更すると、他の.classpathファイルを更新する必要があります。

+0

ありがとう、それは私のためにそれをしました。 – Yogu

-1

私は間違っているかもしれませんが、ネイティブライブラリはDLLや共有オブジェクトなどのもので、クラスパスにはまったく行きません。各環境にはPATH変数などがあり、ネイティブライブラリを含める必要があります。ユーザーはいくつかの設定(Eclipse内または環境変数経由)が必要な場合があります。

+1

ネイティブパスは* classpath *には含まれていません。classpathファイルで宣言されています。 Eclipseでは、デバッグ時にPATH変数に使用されます。 1つのプラットフォームのみを使用して、これは問題ではなく、確かに意図された方法です。 – Yogu

+0

良い点 - 私は明らかに質問を慎重に読まなかった。 – user888379

-1

ライブラリは、クラスパス、システムPATH、およびプロパティjava.library.path内で検索されません。

お客様のケースでは、ClassLoaderカスタム、特にfindLibrary(..)およびloadLibrary(..)の方法があります。これにより、検出されたOSに基づいて適切なライブラリを選択することができます。

3

Eclipseには必要な機能がありません。だから、あなたはJavaからそれを行うことができます。

System.loadLibraryの代わりにSystem.loadを呼び出します。これには、現在のプラットフォームに基づいて正しいパス名を計算するコードを記述する必要があります。現在のプラットフォームが何であるかを伝えるために値を渡すには、-Dを使う必要があります。

これにより、式からjava.library.pathが削除されます。

JNIライブラリに依存関係がある場合は、PATH、LD_LIBRARY_PATH、またはDYLD_LIBRARY_PATHも設定する必要があります。あなたがhttps://github.com/bimargulies/jni-origin-testbedを見るさらなるステップを踏み出さない限り。しかし、Windowsの場合、遅延ローダーに必要な処理はありません。

+0

非常に興味深い答えは、私はすぐにこれを試してみます。 – Yogu

+0

私が見てきたように、参照されているライブラリのコードを変更する必要があり、これは実用的ではありません。しかし、私が自分で図書館を書いたとしてもあなたの答えは完璧です。 – Yogu

+0

参照するライブラリのコードを変更する必要があるのはなぜですか?私はこれをしたときに私はしなかった。 – bmargulies

関連する問題