我无法编译以下程序
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â
我做错了什么?
答案 0 :(得分:11)
如果有人遇到此错误,问题是javah创建的头文件没有指定其参数的名称(它只是头文件而不是实现)。但是在您的实现中,如果您只是复制/粘贴头文件而不添加参数名称,那么您将收到错误。
所以头文件中的代码(由javah生成的文件,不要更改此文件):
JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *, jobject, jstring);
当你复制它(进入以.c或.cpp结尾的文件)时,需要有变量名称:
JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *env, jobject obj, jstring mystring){
这将解决它。
答案 1 :(得分:0)
JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *jbi, jobject obj, jstring str){
printf(jstring);
return;
}
麻省你失去了什么