我有一个简单的类用于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上工作,每次我需要使用这个工具时都不想切换操作系统。
这是正确答案:
对于控制台,转到“bin / classes”文件夹并运行我使用过的命令:
javah -jni com.main_package.NativeClass
对于eclipse,使用我给出的链接,而不是${project_loc}/bin/
使用${project_loc}/bin/classes/
,然后在包资源管理器中,转到NativeClass.java,并运行外部工具。输出将与java文件的路径相同。
答案 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