EclipseJNI和包中的.java文件
我正在Eclipse中编写一个简单的JNI演示项目,以集成Java和C代码。为此,我安装了Eclipse的CDT插件。 使用,我将HelloJNI java文件放在Eclipse的“默认包”中,使用makefile生成HelloJNI.hc头文件没有问题 我的生成文件:EclipseJNI和包中的.java文件,java,c,eclipse,makefile,java-native-interface,Java,C,Eclipse,Makefile,Java Native Interface,我正在Eclipse中编写一个简单的JNI演示项目,以集成Java和C代码。为此,我安装了Eclipse的CDT插件。 使用,我将HelloJNI java文件放在Eclipse的“默认包”中,使用makefile生成HelloJNI.hc头文件没有问题 我的生成文件: # Define a variable for classpath CLASS_PATH = ../bin # Define a virtual path for .class in the bin directory vpa
# Define a variable for classpath
CLASS_PATH = ../bin
# Define a virtual path for .class in the bin directory
vpath %.class $(CLASS_PATH)
# $* matches the target filename without the extension
HelloJNI.h : HelloJNI.class
javah -classpath $(CLASS_PATH) HelloJNI
问题是,我不知道如何让HelloJNI.java在诸如com.example之类的包中而不是在默认包中工作。即。运行相同的make目标时,我得到错误输出:
make:**没有规则将目标设置为“HelloJNI.class”,这是“HelloJNI.h”所需要的。停下来
我试图将包名称添加到javah命令:
javah -classpath $(CLASS_PATH) com.example.HelloJNI
…但得到同样的错误
我试图将类路径更改为:
CLASS_PATH = ../bin/com/example
…但会出现以下错误:
做HelloJNI.h
javah-classpath../bin/com/example HelloJNI
错误:找不到“HelloJNI”的类文件
我需要用我的makefile做什么才能使它工作?javah实用程序希望您为它提供要分析的类的完全限定名,并且它希望根据该名找到相对于类路径的类。因此,如果类的名称是
com.example.HelloJNI
,那么您可能会告诉make
类似的内容:
CLASS_DIR = ../bin
HelloJNI.h : $(CLASS_DIR)/com/example/HelloJNI.class
javah -force -classpath $(CLASS_DIR) com.example.HelloJNI
如果你想的话,你可以把它打扮一下。我在自己的Makefiles中使用了一些更干燥剂和自动化程度更高的东西,但我正在尝试理解关键点。特别是:
-classpath
到javah
;这遵循表示类路径的常规Java规则javah
指定正确的完全限定类名-force
选项,否则javah
将拒绝替换已经存在的标题。当您手动调用javah
时,这种默认行为是合理的,但是当您试图使用make
使JNI头保持最新时,它会使您陷入困境。当然,也就是说,您不能手动修改这些标题,因为这样的修改很可能会失败