タグ付けされた質問 「java-native-interface」

Java Native Interface(JNI)は、JVM実装がシステムネイティブコードを実行する機能と、ネイティブコードがJavaコードを実行する機能(新しいJVMインスタンスを作成すること)の両方を提供します。JNIの最も一般的なターゲット言語はCおよびC ++であり、少なくともSun / Oracle JDK実装がヘルパーコマンドを提供します(javap-コードの逆アセンブリ、javahはcコード生成)。

30
JNI共有ライブラリ(JDK)のロードに失敗しました
Eclipseを開こうとすると、ポップアップダイアログに次のように表示されます。 JNI共有ライブラリ "C:/JDK/bin/client/jvm.dll" `のロードに失敗しました。 これに続いて、Eclipseフォースは終了します。 ここでは、いくつかのポイントを挙げておきます。 そのパスに何かが存在するかどうかを確認しました。それは存在します。 私のEclipseとJava SE Development Kitはどちらも64ビットです。私のシステムをチェックしたところ、64ビットを処理できます。 私はGoogleとStack Overflowでこの問題を検索しましたが、見つかった唯一の答えは、32ビットバージョンのJDKとEclipseをダウンロードすることでした。 32ビットバージョンのダウンロードは、最後の手段としてのみやりたいことです。 この問題を解決するために何が提案されますか?







2
JNIによるjstringからcharへの変換*
jstringJNIを使​​用して、データ型としてJavaからCコードにURL文字列を渡しました。そして、私のライブラリメソッドには、char *URL が必要です。 私はどのように変換することができますjstringではchar *? PS:CでjcharArrayを使用する利点はありますか?(つまりchar []、ネイティブメソッドで文字列の代わりに渡す)

6
JAR内のネイティブライブラリとJNIライブラリをバンドルする方法
問題の図書館は東京内閣です。 再配布の問題を回避するために、ネイティブライブラリ、JNIライブラリ、およびすべてのJava APIクラスを1つのJARファイルに含めたいです。 GitHubでこれが試みられているようですが、 実際のネイティブライブラリは含まれず、JNIライブラリのみが含まれます。 これは、Leiningenのネイティブ依存プラグインに固有のようです(再配布可能としては機能しません)。 問題は、すべてを1つのJARにバンドルして再配布できるかどうかです。はいの場合、どのように? PS:はい、移植性に影響する可能性があることを理解しています。

15
`__android_log_print 'への未定義の参照
私のメイクファイルの何が問題になっていますか? Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := foo LOCAL_SRC_FILES := foo.c LOCAL_EXPORT_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) foo.c #include <string.h> #include <jni.h> #include <android/log.h> #define LOG_TAG "foo" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) void test() { LOGI("test"); } ndk-build foo.c:9: undefined reference to `__android_log_print'

9
デフォルトのパッケージからクラスをインポートする方法
重複の可能性:デフォルトパッケージのjava-classesにアクセスする方法 私はEclipse 3.5を使用しており、デフォルトのパッケージとともにいくつかのパッケージ構造を持つプロジェクトを作成しました。デフォルトのパッケージに1つのクラス-Calculations.javaがあり、そのクラスを任意のパッケージ(たとえばcom.company.calc)で使用したいと思います。デフォルトパッケージにあるクラスを使用しようとすると、コンパイラエラーが発生します。デフォルトパッケージのクラスを認識できません。問題はどこだ? Calculations.java-ソースコード public class Calculations { native public int Calculate(int contextId); native public double GetProgress(int contextId); static { System.loadLibrary("Calc"); } } クラスを他のパッケージに入れることはできません。このクラスには、Delphiで実装されているいくつかのネイティブメソッドがあります。そのクラスをいずれかのフォルダーに配置した場合、回避したいDLLに変更を加える必要があります(実際には-できません)。そのため、クラスをデフォルトパッケージに配置しました。

4
AndroidのJNIでSIGSEGV(セグメンテーション違反)をキャッチしてスタックトレースを取得するにはどうすればよいですか?
プロジェクトを新しいAndroid Native Development Kit(JNI)に移動します。SIGSEGVが発生した場合(おそらくSIGILL、SIGABRT、SIGFPEも)、代わりに、素敵なクラッシュレポートダイアログを表示したいのですが。 (または以前に)現在発生していること:プロセスの即時の異常な終了と、OSによるプロセスの再起動の試み。(編集: JVM / Dalvik VMはシグナルをキャッチし、スタックトレースやその他の有用な情報をログに記録します。その情報をメールで送信するオプションをユーザーに提供したいだけです。) 状況は次のとおりです。私が記述していない大量のCコードが、このアプリケーション(すべてのゲームロジック)でほとんどの作業を行います。他の多くのプラットフォームで十分にテストされていますが、Androidで移植すると、ガベージをフィードし、ネイティブコードでクラッシュを引き起こすので、現在Androidログに表示されるクラッシュダンプ(ネイティブとJavaの両方)が必要です(Android以外の状況ではstderrになると思います)。私は自由にCとJavaの両方のコードを変更できますが、コールバック(JNIに出入りするコールバックの両方)の数は約40で、明らかに小さな差分にはボーナスポイントがあります。 J2SEのシグナルチェーンライブラリであるlibjsig.soを聞いたことがあります。Androidにそのようなシグナルハンドラーを安全にインストールできれば、私の疑問の一部を解決できますが、Android / Dalvikにはそのようなライブラリはありません。

13
java.lang.UnsatisfiedLinkErrorいいえjava.library.pathに*****。dll
Webアプリケーションにカスタムdllファイルをロードするにはどうすればよいですか?私は以下を試しました: system32フォルダー内のすべての必要なDLLをコピーし、それらの1つをServletコンストラクターにロードしようとしましたSystem.loadLibrary とに必要なdllをコピーtomcat_home/shared/libしましたtomcat_home/common/lib これらのDLLはすべてWEB-INF/libWebアプリケーション内にあります

2
AndroidでC ++からJavaメソッドを呼び出す
Javaがネイティブメソッドを呼び出す間に、C ++から単純なJavaメソッド呼び出しを取得しようとしています。Javaコードは次のとおりです。 public class MainActivity extends Activity { private static String LIB_NAME = "name"; static { System.loadLibrary(LIB_NAME); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.textview); tv.setText(this.getJniString()); } public void messageMe(String text) { System.out.println(text); } public …

17
JNIプロジェクトでUnsatisfiedLinkError(依存ライブラリが見つかりません)を修正する方法
私はJNIを使​​用するJavaプロジェクトに取り組んでいます。JNIは、自分で作成したカスタムライブラリ(mylib.dllなど)を呼び出します。これは、サードパーティのライブラリlibsndfile-1.dllに依存します。 プログラムを実行すると、次のようにクラッシュします。 java.lang.UnsatisfiedLinkError: C:\...path...\mylib.dll: Can't find dependent libraries. 私はこのサイト(および他のサイト)を検索し、いくつかの修正を試みました: 依存関係ウォーカーを実行しました。DWは、libsndfileに必要な2つのライブラリ、MPR.DLLとSHLWAPI.DLLに「未解決のインポート」があるという警告をいくつか出しましたが、DW FAQは、これらの警告は無視しても問題ないと述べています。 ここで提案されているように、mylib.dllのメソッド名を修正しました。メソッド名はコンパイラによってどういうわけか壊れていましたが、リンカフラグを追加し、dllメソッド名がjniヘッダーファイルのメソッド名と正確に一致するようになりました。 これらのDLLをすべて同じディレクトリ(それらを呼び出す.jarと同じディレクトリ)に配置して、正しいPATH上にあることを確認します。 サイコロはありません。 誰かが何が起こっているのか考えていますか? MacBookProのVisualStudio 2010で(Parallels経由で)開発を行っています。私は東芝のラップトップ上のWindowsXPでテストを行っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.