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.


Anmelden zum Antworten