Problem mit Beispiel
-
Moin.
Hab seit langem nichts mehr mit C++ gemacht und versuche gerade mit diesem (http://www.galileocomputing.de/openbook/javainsel/java-24.htm) Beispiel in JNI einzusteigen:
#include <jni.h> #include "sound_JniTest.h" #include <stdio.h> #include <string.h> JNIEXPORT jint JNICALL Java_sound_JniTest_strlen( JNIEnv *env, jclass clazz, jstring s ) { // printf( "Hallo Java-Freunde!\n" ); if ( s == NULL ) { jclass exc = env->FindClass( "java/lang/NullPointerException" ); if ( exc != NULL ) env->ThrowNew(exc, "(in C++ code)"); return -1; } const jbyte* str = env->GetStringUTFChars( s, NULL ); if ( str == NULL ) return -1; int len = strlen( str ); env->ReleaseStringUTFChars(s, str); return (jint) len; }
Kompiliere ich dies aber mit
gcc -I C:\Coding\Tools\Java\JDK1.5\include -I C:\Coding\Tools\Java\JDK1.5\include\win32 -c sound_JniTest.c -o sound_JniTest.o
bekomme ich den Fehler
sound_JniTest.c: In function `Java_sound_JniTest_strlen': sound_JniTest.c:11: request for member `FindClass' in something not a structure or union sound_JniTest.c:13: request for member `ThrowNew' in something not a structure o r union sound_JniTest.c:17: request for member `GetStringUTFChars' in something not a st ructure or union sound_JniTest.c:24: request for member `ReleaseStringUTFChars' in something not a structure or union
Aber *env ist doch ein Pointer auf eine Klasse, der mit -> dereferenziert wird?
Eine zweite Frage meinerseits:
Wenn die Kompilierung erfolgreich ist, muß ich ja noch manuell das Linking anstoßen. Das hab ich in einem anderen Versuch, wo ich nur mit printf innerhalb C++ etwas ausgeben lassen wollte, so probiert:
ld -shared sound_JniTest.o -o jnitest.dll
Hier wollte er aber noch die Standard-Bibliothek bekommen, da er printf nicht gefunden hat. Wo finde ich die denn bei meinem System (Win XP, neben gcc hab ich noch eMbedded Visual C++ 4.0 installiert) bzw. bekomme die her?
Hoffe, Ihr könnt einem Neuling helfen.
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.