Linux & KDevelop: jni.h fehlte und enthält Fehler

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Linux & KDevelop: jni.h fehlte und enthält Fehler

Post by stefan-tiger »

Hallo,

nachdem die Kernelmodulinstallation bis auf 2 warnings problemlos geklappt hat, wollte ich mal das vorgefertigte KDevelop-Projekt ansehen und kompilieren.

Erstmal musste ich in sämtlichen Dateien "/home/rom" durch mein Home-verzeichnis ersetzen.

Das zweite was nicht klappte war, daß cmake nicht installiert war.
Nach der Installation wurde "/usr/local/bin/cmake" gesucht, was bei mir aber unter "/usr/bin/cmake" ist. Also nochmal alle Dateien ändern.

So, danach Fehlte die Header-Datei "jni.h" die ich aber aus dem WindowsSDK herkopieren konnte.
Genauso wie "jni_md.h".

Danach musste ich noch

Code: Select all

typedef long jint;
#ifdef __GNUC__
typedef long long jlong;
#else
typedef __int64 jlong;
#endif
in "jni_md.h" aktivieren und "__GNUC__" irgendwo definieren.

Jetzt tauchen eine Menge weiterer Fehler auf:

Code: Select all

cd '/home/stefan/iowkit' && __cplusplus="1" __GNUC__="1" gmake -k -j1 
/usr/bin/cmake -H/home/stefan/iowkit -B/home/stefan/iowkit --check-build-system CMakeFiles/Makefile.cmake 0
gmake -f CMakeFiles/Makefile2 all
gmake -f src/CMakeFiles/iowkit.dir/build.make src/CMakeFiles/iowkit.dir/depend
gmake[2]: Für das Ziel »src/CMakeFiles/iowkit.dir/depend« ist nichts zu tun.
gmake -f src/CMakeFiles/iowkit.dir/build.make src/CMakeFiles/iowkit.dir/build
Building CXX object src/CMakeFiles/iowkit.dir/iowkitjni.o
c++ -Diowkit_EXPORTS -fPIC -Wall -O2 -o src/CMakeFiles/iowkit.dir/iowkitjni.o -c /home/stefan/iowkit/src/iowkitjni.cpp
In file included from /home/stefan/iowkit/src/iowkitjni.h:2,
from /home/stefan/iowkit/src/iowkitjni.cpp:9:
/home/stefan/iowkit/src/jni.h:212: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:215: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:217: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:220: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:222: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:225: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:228: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:231: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:234: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:238: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:240: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:242: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:245: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:247: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:249: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:253: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:255: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:258: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:261: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:263: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:265: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:268: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:270: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:274: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:276: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:278: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:281: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:285: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:287: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:290: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:294: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:296: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:299: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:303: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:305: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:308: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:311: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:314: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:316: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:320: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:322: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:325: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:329: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:331: Fehler: expected `)' vor »*«-Zeichen
/home/stefan/iowkit/src/jni.h:334: Fehler: expected `)' vor »*«-Zeichen
Was ist da falsch?
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Post by stefan-tiger »

Achja, die Datei "jni.h" von der Zeile 206 bis 220:

Code: Select all

struct JNINativeInterface_ {
    void *reserved0;
    void *reserved1;
    void *reserved2;
    void *reserved3;

    jint(JNICALL *GetVersion)
	(JNIEnv *env);

    jclass (JNICALL *DefineClass)
      (JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len);
    jclass (JNICALL *FindClass)
      (JNIEnv *env, const char *name);

    jmethodID (JNICALL *FromReflectedMethod)
      (JNIEnv *env, jobject method);
    jfieldID (JNICALL *FromReflectedField)
      (JNIEnv *env, jobject field);
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

Also jni_md.h aus dem Windows SDK zu nehmen ist glaube ich keine so gute Idee.

Aber da die Datei ja nicht gerade groß ist hier das komplette Listing

jni_md.h aus dem Linux x86 Java-SDK

Code: Select all

/*
 * @(#)jni_md.h	1.18 03/12/19
 *
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

#ifndef _JAVASOFT_JNI_MD_H_
#define _JAVASOFT_JNI_MD_H_

#define JNIEXPORT 
#define JNIIMPORT
#define JNICALL

typedef int jint;
#ifdef _LP64 /* 64-bit Solaris */
typedef long jlong;
#else
typedef long long jlong;
#endif

typedef signed char jbyte;

#endif /* !_JAVASOFT_JNI_MD_H_ */
Vielleicht geht es ja hiermit ?
Eberhard
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

jni.h und jni_md.h sind nur bei Windows dabei, da ich nicht erwarte das jeder Entwickler Java installiert hat. Bei Linux kann man das schon eher erwarten.

KDevelop habe ich benutzt weil es mir den schnellsten Weg zum .so bot. cmake war auch bei mir (SuSE 10) nicht dabei und musste aus dem CVS installiert werden.

Fuer das 2.0 API werden die Sourcen in einem normalen automake-Projekt ausgeliefert werden.
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Post by stefan-tiger »

Ja danke, damit gehts.

Warum auch immer.

Das kommt jetzt bei der Ausführung:

Code: Select all

stefan@Athlon64 ~/iowkit $ src/iowkittest
Failed to open device
Hoffe das ist korrekt, wenn der Treiber geladen ist aber nichts angeschlossen.
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Ja, klingt bis dahin gesund.
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Post by stefan-tiger »

Robert Marquardt wrote:...

Fuer das 2.0 API werden die Sourcen in einem normalen automake-Projekt ausgeliefert werden.
Freut mich wenn es weiterentwickelt wird (obwohl die letzte Änderung schon etwas her ist).

Es soll nämlich für Projekte an unserer Hochschule eingesetzt werden.
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Post by towaibw »

Auch wenn das Problem gelöst ist, hier noch ein klärender Hinweis:

Die orginale jni_md.h von Windows enthält anstelle von

Code: Select all

#ifdef __GNUC__
typedef long long jlong;
#else
typedef __int64 jlong;
#endif
nur

Code: Select all

typedef __int64 jlong;
Der typedef in Abhängigkeit von __GNUC__ ist nur dann erforderlich, wenn man unter Windows den gcc (innerhalb von cygwin) verwenden möchte. Als der JNI Wrapper noch nicht in der iowkit.dll integriert war, gab es dafür eine extra dll und die hatte ich mit dem gcc erstellt. Aus dieser Zeit scheint das jni_md.h im SDK zu sein. Aber wie wayoda schon sagte, Dateien für Windows, zu erkennen an Strings wie "__declspec(dllexport)", sollte man auch nur unter Windows benutzen ;-)
Post Reply