在linux上使用javah

我有一个简单的类使用JNI,我需要导出到头文件(.h)。

我读过,我需要使用javah命令,转到项目的src文件夹,然后键入:

 javah -jni com.main_package.NativeClass 

在Windows上,它工作正常,但在我的主要操作系统(Linux)上没有。 它一直告诉它找不到课程。 我试图使用命令的许多组合,并在许多可能的path上运行它,但它不起作用。 我跟随了很多教程和网站(包括这里),并尝试了他们的组合。

我甚至尝试过使用Eclipse的外部工具,如下所示,但它也显示了相同的错误。

我得到的错误是这样的:

 error: cannot access com.main_package.NativeClass class file for com.main_package.NativeClass not found javadoc: error - Class com.main_package.NativeClass not found. Error: No classes were specified on the command line. Try -help. 

谁能帮帮我吗? 我真的很喜欢在Linux上工作,每次需要使用此工具时都不想切换操作系统。


这是正确的答案:

  1. 对于控制台,转到“bin / classes”文件夹并运行我用过的命令:

    javah -jni com.main_package.NativeClass

  2. 对于eclipse,使用我给出的链接,而不是${project_loc}/bin/ use ${project_loc}/bin/classes/ ,然后在包资源pipe理器中,转到NativeClass.java,运行外部工具。 输出将与java文件的path相同。

你不去到项目的src文件夹,而是编译的.class文件的根目录(其中com子文件夹存在或被创建)。 javah正在寻找编译的类,而不是你的源文件。 如果您只是手动运行javac ,则类文件将与原始源位于相同的位置。 然后声明“去src文件夹”是正确的。 但是,如果你在Eclipse中有一个项目,或者你使用ant或者其他的东西,这些类可能处于完全不同的位置 – 这取决于你的项目是如何设置的。 我猜测你的Windows和Linux上的Eclipse项目的设置是不一样的。

您不必在类文件上使用javah。 您可以直接在源文件(.java)上使用javah来生成本地C / ++签名(头文件)。 例如:

 javah -cp /Users/Android/android-sdk/platforms/android-xy/android.jar;. com.test.JniTest