2011-01-06 61 views
5

我無法編譯下面的程序使用編譯C文件jni.h

PPConverter.java:

public class PPConverter { 
    private native void convert(String s); 
    public static void main(String[] args){ 
     new PPConverter().convert(args[0]); 
    } 
    static { 
     System.loadLibrary("converter"); 
    } 
} 

converter.c:

#include <jni.h> 
#include <stdio.h> 
#include "PPConverter.h" 

JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *, jobject, jstring){ 
    printf(jstring); 
    return; 
    } 

由於我的工作UNIX,我正在使用以下命令來編譯converter.c文件:

cc -I/usr/lib/jvm/java-6-openjdk/include converter.c -o libconverter.so 

,但我收到以下錯誤:

converter.c: In function âJava_PPConverter_convertâ: 
converter.c:5: error: parameter name omitted 
converter.c:5: error: parameter name omitted 
converter.c:5: error: parameter name omitted 
converter.c:6: error: expected expression before âjstringâ 

我在做什麼錯?

+1

您是否閱讀過錯誤信息?他們完全告訴你缺少什麼:方法簽名中參數的名稱。 – 2011-01-06 03:04:48

回答

0
JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *jbi, jobject obj, jstring str){ 
    printf(jstring); 
    return; 
    } 

莫比ü丟了東西

8

萬一有人運行到這個錯誤,問題是,JAVAH創建的頭文件沒有指定其參數的名稱(這只是一個頭文件不是實現)。但在你的實現中,如果你只是複製/粘貼頭文件而不添加參數名稱,你會得到錯誤。當您複製它(到你以.c或結尾的.cpp文件)

JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *, jobject, jstring); 

,:

所以從你的頭文件中的代碼(由JAVAH生成的文件,不改變這個文件)需要有變量名稱:

JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *env, jobject obj, jstring mystring){ 

這將修復它。