【问题标题】:Using javah on linux在 Linux 上使用 javah
【发布时间】:2012-06-23 13:03:00
【问题描述】:

我有一个用于 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 文件的路径相同。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 不完全是你写的,但它在“.../bin/classes/”文件夹中工作。也许那是因为它是一个 android 库项目。如何将其设置为在 eclipse 本身上工作而不是使用控制台?
    • 找到了如何让它在 eclipse 上工作。我将更新我的问题以包含答案。谢谢。
    • 你知道我如何使用 eclipse 来做到这一点并将输出文件放在项目的特定文件夹中吗?
    • 不是从我的头顶。不管怎样,你最好问一个新问题。这是一个普遍有用的知识,为什么要把它隐藏在 JNI 主题下的嵌套 cmets 中。
    • 我现在已经从头开始在 windows 上使用 eclipse,但我找不到使用 eclipse 本身做同样工作的方法。它一直说“使用ndk的名为make的外部工具不存在该文件。” .
    【解决方案2】:

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

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

    【讨论】:

    • 很遗憾我不能再尝试了。也许在未来。感谢您尝试提供帮助。希望它会帮助别人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多