2013-12-05 4 views
0

Я пытался изучить часть JNI в Linux. Я нахожусь на фоне C. Я пытался использовать JNI, чтобы я мог легко сделать интерфейс на Java. Я считаю, что пользовательский интерфейс может быть создан в Javascript/html. Это может легко вызвать Java api. Через Java Api я могу вызывать API C/C++. Я считаю, что это самый простой способ сделать пользовательский интерфейс. Таким образом, я пытаюсь JNI. Вот пример кода, который я сделал.Компиляция программы JNI на linux-Fedora core?

Hello.java

public class Hello { 
    public native void sayHi(String who, int times); 
    static { System.loadLibrary("HelloImpl"); } 
    public static void main (String[] args) { 
     Hello hello = new Hello(); 
     hello.sayHi(args[0], Integer.parseInt(args[1])); 
    } 
} 

А позже

javac Hello.java 
javah -jni Hello 

Сейчас я пишу hello.c программу

#include <stdio.h> 
#include "Hello.h" 

JNIEXPORT void JNICALL Java_Hello_sayHi 
    (JNIEnv *, jobject, jstring, jint) 
{ 
    printf("Shreyas.. HEllo world...\r\n"); 

} 

Я столкнулся с проблемой при компиляции привет. c.

$ gcc -c hello.c -I/usr/java/jdk1.7.0_45/include/ -I/usr/java/jdk1.7.0_45/include/linux/ 
hello.c: In function ‘Java_Hello_sayHi’: 
hello.c:5:3: error: parameter name omitted 
hello.c:5:3: error: parameter name omitted 
hello.c:5:3: error: parameter name omitted 
hello.c:5:3: error: parameter name omitted 

Не могли бы вы помочь мне в этом? Кроме того, согласны ли вы, JNI - это хороший способ реализовать полное решение стека - UI (JAVASCRIPT) + JAVA + C/C++ -> Linux?

+0

Какая часть имени параметра опущена? Хороший traditon дает параметры в C имени. И нет, это совсем не хорошая идея, так как требует глубокого знания всех {C, Java, Javascript} –

+0

Вы запутываете Java с Javascript? Они не одинаковы. – Joni

+0

C и C++ - разные языки. То, что вы написали, является допустимым C++, но не является допустимым C. – Casey

ответ

1

Вы забыли добавить имена для параметров в определении функции в hello.c. Например:

JNIEXPORT void JNICALL Java_Hello_sayHi 
    (JNIEnv *env, jobject obj, jstring str, jint i) 
{ 
    printf("Shreyas.. HEllo world...\r\n"); 
} 
Смежные вопросы