エラー: '->' のベースオペランドがポインタでない 'JNIEnv' 型である。
2022-02-25 08:13:22
から取得した。 error: '->' のベースオペランドが非ポインタ型 'JNIEnv' である。
質問です。
#include <stdio.h>
#include <jni.h>
JNIEnv* create_vm() {
JavaVM* jvm;
JNIEnv* env;
JavaVMInitArgs args;
JavaVMOption Optionen[1];
/* Es gibt eine neue JNI_VERSION_1_4, die aber für die Zwecke unseres Beispiels nichts beiträgt. */
args.version = JNI_VERSION_1_2;
args.nOptions = 1;
options[0].optionString = "-Djava.class.path=/home/test/workspace/pankajs/"
"jikes/JikesRVMia32-linuxproduction/target/tests/stress/prototype/basic/classes";
args.options = options;
args.ignoreUnrecognized = JNI_FALSE;
JNI_CreateJavaVM(&jvm, (void **)&env, &args);
return env;
}
void invoke_class(JNIEnv* env) {
jclass halloWeltKlasse;
jmethodID mainMethod;
jobjectArray applicationArgs;
jstring applicationArg0;
helloWorldClass = (*env)->FindClass(env, "/test/org/jikesrvm/basic/core/bytecode/TestSwitch");
mainMethod = (*env)->GetStaticMethodID(env, helloWorldClass, "main", "([Ljava/lang/String;)V");
applicationArgs = (*env)->NewObjectArray(env, 1, (*env)->FindClass(env, "java/lang/String"), NULL);
applicationArg0 = (*env)->NewStringUTF(env, "From-C-program");
(*env)->SetObjectArrayElement(env, applicationArgs, 0, applicationArg0);
(*env)->CallStaticVoidMethod(env, helloWorldClass, mainMethod, applicationArgs);
}
int main(int argc, char **argv) {
JNIEnv* env = create_vm();
invoke_class( env );
}
Ich versuche zu lernen, wie die JVM tatsächlich von Bootstrap-C-Dateien aufgerufen wird.
私はインターネットでこの例を見つけましたが、実行中にいくつかの問題に直面しています。
私が知っている限りでは、ビルドコマンドを適切に指定しているのですが。
g++ -g -I /usr/lib/jvm/java-6-sun-1.6.0.26/include -I /usr/lib/jvm/java-6-sun-1.6.0.26/include/linux CallJVM.c
私の意図は、実際にjikesrvmを使って実行することですが、これを実験するために、私はJVMで動作することを選択しました。私が取得しているエラーは、:
CallJVM.c: In der Funktion 'JNIEnv* create_vm()':
CallJVM.c:14:4: warning: deprecated conversion from string constant to 'char*'
CallJVM.c: In Funktion 'void invoke_class(JNIEnv*)':
CallJVM.c:28:26: Fehler: Basisoperand von '->' hat Nicht-Zeiger-Typ 'JNIEnv'
CallJVM.c:30:21: Fehler: Basisoperand von '->' hat Nicht-Zeiger-Typ 'JNIEnv'
CallJVM.c:32:26: Fehler: Basisoperand von '->' hat Nicht-Zeiger-Typ 'JNIEnv'
CallJVM.c:32:57: Fehler: Basisoperand von '->' hat Nicht-Zeiger-Typ 'JNIEnv'
CallJVM.c:33:26: Fehler: Basisoperand von '->' hat Nicht-Zeiger-Typ 'JNIEnv'
CallJVM.c:34:8: Fehler: Basisoperand von '->' hat Nicht-Zeiger-Typ 'JNIEnv'
CallJVM.c:36:8: Fehler: Basisoperand von '->' hat Nicht-Zeiger-Typ 'JNIEnv'
CとC++で実装の仕方が違うことに気づきましたが、正しく書けているつもりです。
編集:gccでコンパイルすると、次のようになります。
undefinierter Verweis auf `JNI_CreateJavaVM'
で、eclipseでプロンプトが表示されていたものですが、私の設定が適切でないのでは?
ctrl+klick.
を使用する場合
.
C
関連
-
ADBサーバーがackしない問題の解決策(ADB接続の問題)
-
Android Studio 3.1.2 新規プロジェクトのエラー AAPT2エラー:詳細はログを確認してください(Gradle 3.1.2)
-
Android Studio--警告。アプリはGoogle検索でインデックスされません
-
Eclipse &プラグインのよくある使用エラーとコンパイルエラー
-
Android 開発の問題点:ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません
-
Androidレイアウトにおけるmargin,padding,alignの使い分けと違いについて
-
スピナー実装のダウンメニューとイベントリスニング(グラフィックモード)
-
Android Studioの開発環境構築とAndroid Studioエミュレータの作成
-
android.content.res.Resources$NotFoundException: 文字列リソースID #0x1エラー
-
java.util.Iterator java.util.List.iterator()' で null オブジェクト参照例外が発生した場合の解決策を紹介します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
アンドロイド アルメアビ アルメアビ-v7a
-
Androidでの録音とMP3へのローカルトランスコード
-
Error:Execution failed for task ':app:compileDebugJavaWithJavac' 根本的な解決方法
-
Manifest merger failed : Android 12以降をターゲットとするアプリは、明示的な指定が必要です。
-
Intellij Ideaは、シンボルが見つからない、RクラスまたはRパッケージが存在しない、というエラーを報告します。
-
サービスを利用した特別な放送受信者の登録
-
AndroidのSMSメッセージ
-
Androidアプリ】【形状利用概要
-
Android - Androidに多階層メニュー連携操作を実装。
-
Android SDKです。sdkmanagerコマンドラインツールの使用(パッケージの表示、インストール、アップデート、アンインストール)