在linux上使用javah

时间:2012-06-21 09:56:02

标签: android linux android-ndk java-native-interface javah

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

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

javah -jni com.main_package.NativeClass 

在Windows上它工作正常,但在我的主操作系统(Linux)上却没有。它一直在告诉它无法找到班级。我试图使用该命令的许多组合并在许多可能的路径上运行它,但它不起作用。我已经关注了许多教程和网站(包括这里)并尝试了他们的组合。

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

我得到的错误如下:

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/使用${project_loc}/bin/classes/,然后在包资源管理器中,转到NativeClass.java,并运行外部工具。输出将与java文件的路径相同。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

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