为什么在使用JNI时会忽略参数名称?

时间:2020-07-27 14:28:31

标签: c linker

我正在尝试从Java调用名为foo()的C函数。我一直在关注:link1link2,但我不知道为什么会出错。

这是我的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

我在做什么错了?

0 个答案:

没有答案