我正在尝试从Java调用名为foo()
的C函数。我一直在关注:link1和link2,但我不知道为什么会出错。
这是我的Java代码:
package foo;
public class Foo
{
static { System.loadLibrary("foo"); }
public native void foo();
public static void main(String[] args) { new Foo().foo(); }
}
这是我的C代码:
#include <stdio.h>
#include <jni.h>
#include "foo_Foo.h" //< jni generated header
void foo() { puts("Hello world!"); }
JNIEXPORT void JNICALL Java_foo_Foo_foo(JNIEnv*, jobject) { foo(); }
这是Makefile:
# .java source files
JAVA_FILES := \
Foo.java \
# .c source files
C_FILES := \
foo.c \
# include directory for jni.h
JNI_LOCATION := $(subst jni.h,,$(shell locate jni.h))
# include directory for jni_md.h
JNI_MD_LOCATION := $(subst jni_md.h,,$(shell locate jni_md.h))
all: compile libfoo.so
compile: $(JAVA_FILES)
javac -h ./ -d ./ $^
libfoo.so: $(C_FILES)
gcc -shared -fPIC -I$(JNI_LOCATION) -I$(JNI_MD_LOCATION) $^ -o $@
clean:
rm -rf foo *.o *.gch *.so
由于某种原因,gcc给了我
foo.c: In function ‘Java_foo_Foo_foo’:
foo.c:7:1: error: parameter name omitted
JNIEXPORT void JNICALL Java_foo_Foo_foo (JNIEnv *, jobject) { foo(); }
^~~~~~~~~
foo.c:7:1: error: parameter name omitted
我在做什么错了?