gpt4 book ai didi

java - 包中包含 .java 文件的 Eclipse JNI

转载 作者:行者123 更新时间:2023-11-30 14:54:23 24 4
gpt4 key购买 nike

我正在 Eclipse 中编写一个简单的演示 JNI 项目来集成 Java 和 C 代码。我已经为 Eclipse 安装了 CDT 插件来执行此操作。与this project structure我的 HelloJNI java 文件位于 Eclipse 的“(默认包)”中,并且使用 makefile 生成 HelloJNI.h C 头文件没有任何问题。

我的生成文件:

# 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
javah -classpath $(CLASS_PATH) HelloJNI

问题是我不知道如何让它与位于 com.example 等包(而不是默认包)内的 HelloJNI.java 一起工作。即this structure 。当运行相同的 make 目标时,我得到错误输出:

make: *** No rule to make target 'HelloJNI.class', needed by 'HelloJNI.h'. Stop.

我尝试将包名称添加到 javah 命令中:

javah -classpath $(CLASS_PATH) com.example.HelloJNI

...但得到同样的错误。

我尝试将类路径更改为:

CLASS_PATH = ../bin/com/example

...但出现以下错误:

make HelloJNI.h

javah -classpath ../bin/com/example HelloJNI

Error: Could not find class file for 'HelloJNI'.

我需要对 makefile 做什么才能使其工作?

最佳答案

javah 实用程序希望您为其提供要分析的类的完全限定名称,并且它希望根据该名称找到相对于类路径的该类。因此,如果类的名称是 com.example.HelloJNI,那么您可以告诉 make 如下所示:

CLASS_DIR = ../bin

HelloJNI.h : $(CLASS_DIR)/com/example/HelloJNI.class
javah -force -classpath $(CLASS_DIR) com.example.HelloJNI

如果你愿意的话,你可以把它打扮一下。我在自己的 Makefile 中使用了一些更干燥且自动化程度更高的东西,但我正在尝试理解关键点。特别是:

  1. 表达正确的必备文件(.class 文件,位于正确的目录中)。如果您没有正确执行此操作,那么您的 header 有时会在不需要时被重建,和/或在需要时被更新。是。

  2. javah指定适当的-classpath;这遵循表达类路径的普通 Java 规则。

  3. javah 指定正确的完全限定类名。

  4. 使用-force选项,否则javah将拒绝替换已经存在的 header 。当您手动调用 javah 时,这种默认行为是合理的,但是当您尝试使用 make 来保持 JNI header 保持最新时,它会让您陷入困境。当然,您不能对这些 header 进行手动修改,因为此类修改可能会被破坏。

关于java - 包中包含 .java 文件的 Eclipse JNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com