Eclipse JNI 失败,并显示 'javac: invalid flag: ../bin'



我正试图使用CDT在Eclipse中创建一个JNI项目。我正在学习本教程。

因此,首先我将我的项目创建为Java项目,并在默认包中创建了一个HelloJNI类,其中包含一些非常基本的代码。

然后,我在我的项目中添加了一个C性质,在"项目类型"中选择"Makefile项目",在"工具链"中选择了"Linux GCC"。

然后我创建了一个名为"jni"的新目录来存储所有的C代码。然后,我在eclipse中创建了一个名为"makefile"(注意小写名称(的新文件,并将其添加到其中

# 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
javac -h -classpath $(CLASS_PATH) $*

然后,我在jni文件夹中创建了一个名为"HelloJNI.h"的构建目标,它会自动使用makefile。然后我试图建立目标,但我得到了这个错误:

javac -h -classpath ../bin HelloJNI
javac: invalid flag: ../bin
Usage: javac <options> <source files>
use -help for a list of possible options
make: *** [makefile:9: HelloJNI.h] Error 2

我对错误信息感到困惑。javac是否将../bin识别为标志?Eclipse中是否发生了一些奇怪的错误?如果我试图在终端中这样做,我会得到同样的错误。我试着寻找答案,但一无所获。

这是我的目录结构:

-bin
HelloJNI.class
-jni
makefile
-src
HelloJNI.java

编辑:将javac调用更改为

javac -h -classpath $CLASS_PATH $*

给了我以下错误:

error: Class names, 'LASS_PATH,HelloJNI', are only accepted if annotation processing is explicitly requested

起点

看看下面的教程,你的问题与";2.入门";,特别是";步骤2"-编译Java并生成C/C++头文件。

要重新访问,以下是您尝试过的:

javac -h -classpath ../bin HelloJNI

有几点。。

  • javac-h选项指定一个目录。这个目录是生成的头文件应该放在的地方。它需要一个紧接其后的目录名,如下所示:-h directory。在上面的尝试中,它使用了-h选项,但没有指定目录。这是个问题
  • 这包括-classpath ../bin,这在本例中不是必需的。这不是问题,但它没有必要包含,可以删除
  • "HelloJNI";不是编译器的合适输入-您需要指定一个";。java";文件名

修复

在教程中,他们展示了这个例子:

javac -h . HelloJNI.java

这是因为:

  • 他们使用-h和"作为目录(其中"."表示"当前目录"(。

  • 他们正在编译.java文件——";HelloJNI.java";

  • 此外,他们没有使用-classpath。该选项用于指定在哪里查找要编译的类文件(作为编译本身的输入(,但这与本教程示例无关–javac没有任何必要的输入类。因此,只需完全删除-classpath ../bin即可。

最后,如果你按照教程中发布的命令运行命令,事情应该会对你有用:

javac -h . HelloJNI.java

另外:JDK版本差异

您没有指定您使用的JDK版本,但如果您使用的是JDK的旧版本(8之前的版本(,则有随后的不同步骤(即除了使用javac之外还使用javah(。

最新更新