twi*_*zle 6 java-native-interface
我在编译以下程序时遇到问题
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");
}
}
Run Code Online (Sandbox Code Playgroud)
converter.c:
#include <jni.h>
#include <stdio.h>
#include "PPConverter.h"
JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *, jobject, jstring){
printf(jstring);
return;
}
Run Code Online (Sandbox Code Playgroud)
由于我在UNIX上工作,我使用以下命令编译converter.c文件:
cc -I/usr/lib/jvm/java-6-openjdk/include converter.c -o libconverter.so
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
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â
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么??
tes*_*ift 11
如果有人遇到这个错误,问题是javah创建的头文件没有指定其参数的名称(它只是一个头文件而不是一个实现).但在您的实现中,如果您只是复制/粘贴头文件而不添加参数名称,您将收到错误.
所以来自头文件的代码(由javah生成的文件,不要更改此文件):
JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *, jobject, jstring);
Run Code Online (Sandbox Code Playgroud)
当你复制它(进入以.c或.cpp结尾的文件)时,需要有变量名称:
JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *env, jobject obj, jstring mystring){
Run Code Online (Sandbox Code Playgroud)
这将解决它.
小智 1
JNIEXPORT void JNICALL Java_PPConverter_convert (JNIEnv *jbi, jobject obj, jstring str){
printf(jstring);
return;
}
Run Code Online (Sandbox Code Playgroud)
也许你丢了东西