问题标签 [javah]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
60 浏览

java - 在 Linux 上将 C 与 Java 接口

对于一个项目,我需要能够通过 Java 使用一些 C 程序。我们的老师告诉我们可以使用 minGW,但这似乎只能在 Windows 上运行,而我的机器运行的是 Linux(Mint 18)。我看到有关使用 javah 的帖子,但是当我尝试使用它时,我收到以下消息

所以我尝试sudo apt-get install javah并得到

我究竟做错了什么?有人可以给我一些关于如何做到这一点的指示吗?谢谢 x

0 投票
1 回答
620 浏览

java - javah -jni不工作?

我一直在尝试使用以下命令创建一个 .h 文件:

当然做了之后

这不会给我任何错误消息...

但是,每当我执行javah -jni命令时,都会出现以下错误:

顺便说一句,我正在使用 Windows 10 PC

0 投票
1 回答
1093 浏览

java - Javah 工具错误:找不到 HelloWorld 的类文件

我正在尝试使用命令行中的 javah 工具和 windows 7 操作系统上的 eclipse 上的外部工具配置来创建头文件,但它不起作用。

我的代码是:

我遵循了不同的方法,甚至阅读了 Oracle 的 javah 工具文档,但它们无助于克服这个问题。

我的类文件(HelloWorld.class)和java文件(HelloWorld.java)都在C:\..\eclipse-workspace\Distribution System Process\src\mypackage

但是每当我运行 javah 工具时,它都会给我一个错误:

我也尝试提供类路径,但没有得到任何头文件。

注意:我的包中有两个类。Frame1.java 是主类,即 Gui,另一个类用于 JNI,名为 HelloWorld.java。我不确定这些类是否重要,但我目前正在研究 HelloWorld.java 以创建一个头文件:

我的项目的屏幕截图

是什么导致了这个失败?:(

0 投票
3 回答
5929 浏览

java - 为 JDK 10 中的类文件生成 JNI 头文件

Java 本机接口 (JNI) 的一个组成部分是通过 C 标头桥接 JVM 代码和本机代码。生成这些头文件的方法过去非常简单:只需javah在类文件上调用命令行实用程序。然后,此过程将为任何标有native修饰符的方法生成原型。

然而,从 Java 10 开始,该javah实用程序已被删除,建议将其替换为 javac 的新标志“-h”。如果有可用的 Java 源文件,则替换工作正常,但是在只有编译的类文件可用的情况下就不足了。(引发这个问题的问题是我正在尝试从 Scala 源代码生成 JNI 绑定。我目前的方法是先编译它们,然后在生成的类文件上运行 javah。)

在只有编译的类文件可用的情况下,有没有办法生成 C 头文件,类似于以前的方式javah

0 投票
2 回答
9909 浏览

java - JDK安装后javah丢失

我可以找到javajavac但我的文件夹javadoc中没有。javah.exejdk\\bin

我尝试重新安装 JDK,但它仍然丢失。我怎样才能得到它,为什么它不见了?

我发现了一个类似的问题,操作系统是 Linux,但我找不到 Windows 用户的答案。

我的操作系统是 Windows 10。Java 版本是10.0.1

0 投票
0 回答
257 浏览

java - 如何使用 javac -h?

java 10 的新特性,移除javahjavac -h. 但是当我尝试这个时,它说“没有源文件”。我尝试在尾部添加源文件名,类文件名,类文件名(无后缀),目录名,...,但没有用。我可以从谷歌找到帮助,页面都教如何使用javah.

0 投票
1 回答
1884 浏览

java - 如何将 -h 参数传递给 maven 编译器插件以创建 JNI 头文件

我已经尝试在 pom 中传递这个参数,但它无法识别它。由于 jdk 8 我们不必手动运行 javah 来生成头文件,而是我们可以将 -h 参数传递给 javac 并在编译时生成头文件。因此,如果我可以将“-h dir”传递给 maven 编译器插件,我可以在运行 mvn compile 时生成头文件

但是当我运行 mvn install 我得到这个

[信息] 构建失败

[信息] --------------------------------------------- -------------------------

[INFO] 总时间:2.936 秒

[INFO] 完成于:2018-11-07T14:52:49+05:30

[INFO] 最终内存:9M/155M

[信息] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------

[错误] 无法在项目 adiesha-native 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile):致命错误编译:无效标志:-h。-> [帮助 1]

有没有其他方法可以用 maven 做到这一点,或者我必须使用“javac -h dir”手动创建它们

任何帮助将不胜感激

0 投票
1 回答
1559 浏览

c - How do I call a Java Native Interface C function from my Go code?

I am up with implementing my Java Native Interface functions in Golang using the golang C lib.
Now I want to convert a jstring to an UTF-8 string using the JNI function GetStringUTFChars but I get an error when doing it. These are the steps I have done:

In my Java class (called MyClass) where I have defined the JNI method, I have:

Using javah, I have generated the .h-file with the function defined in C language:

Then, in my Go code I have the following code:

When I build the go file using:
go build -buildmode=c-shared -o libmyclass.dylib libmyclass.go
then I get the following error:

could not determine kind of name for C.GetStringUTFChars

How should I call the GetStringUTFChars defined in the JNI spec so I then can print the string with fmt.println?

EDIT 2
Removed "edit 1" since the procedure above was correct, it was just the LD_LIBRARY_PATH variable that was not set.

0 投票
1 回答
249 浏览

c++ - 如何使用 jni 和 javah 修复“UnsatisfiedLinkError: No implementation found”错误

我想在我的 Java 代码中使用 C++ 方法。所以我决定使用JNI。但是由于我在执行时的错误,链接接缝无法正常工作No implementation found for void com.me.Native.helloWorld() (tried Java_com_me_Native_helloWorld and Java_com_me_Native_helloWorld__)

Native.java(在其他地方称为Native.helloWorld()):

安卓.mk

com_me_Native.h(使用 javah 命令生成):

com_me_Native.cpp

正如你看到的一个用途JNIEXPORTJNICALL我的方法。我也extern "C"用于 C++ 使用。我.h是由javah. 我检查了Android.mk,我没有忘记将我的.cpp文件添加到LOCAL_SRC_FILES. 我将我的库静态加载到 中Native.java以使用我的静态函数。

现在我不知道错误可能来自哪里......知道吗?!

0 投票
1 回答
246 浏览

java - 如何使用 Java 10 及更高版本跳过 ant 中的 javah 任务?

我的 build.xml 中有一个javah任务。该javah任务不再适用于 Java 10 及更高版本,因此我添加nativeHeaderDir了一个javac任务,它运行良好。但是,我仍然想保留该javah任务,以便相同的 build.xml 适用于较旧的 Java。

javah仅在使用 Java 10 及更高版本运行时,如何使 ant 跳过任务?更一般地说,有什么办法可以根据Java版本切换build.xml中的执行路径吗?或者,是否有任何其他标准方法可以将javah任务从旧 Java 迁移到 Java 10/11,同时保持向后兼容性?