问题标签 [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.
java - 在 Linux 上将 C 与 Java 接口
对于一个项目,我需要能够通过 Java 使用一些 C 程序。我们的老师告诉我们可以使用 minGW,但这似乎只能在 Windows 上运行,而我的机器运行的是 Linux(Mint 18)。我看到有关使用 javah 的帖子,但是当我尝试使用它时,我收到以下消息
所以我尝试sudo apt-get install javah
并得到
我究竟做错了什么?有人可以给我一些关于如何做到这一点的指示吗?谢谢 x
java - javah -jni不工作?
我一直在尝试使用以下命令创建一个 .h 文件:
当然做了之后
这不会给我任何错误消息...
但是,每当我执行javah -jni
命令时,都会出现以下错误:
顺便说一句,我正在使用 Windows 10 PC
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 以创建一个头文件:
是什么导致了这个失败?:(
java - 为 JDK 10 中的类文件生成 JNI 头文件
Java 本机接口 (JNI) 的一个组成部分是通过 C 标头桥接 JVM 代码和本机代码。生成这些头文件的方法过去非常简单:只需javah
在类文件上调用命令行实用程序。然后,此过程将为任何标有native
修饰符的方法生成原型。
然而,从 Java 10 开始,该javah
实用程序已被删除,建议将其替换为 javac 的新标志“-h”。如果有可用的 Java 源文件,则替换工作正常,但是在只有编译的类文件可用的情况下就不足了。(引发这个问题的问题是我正在尝试从 Scala 源代码生成 JNI 绑定。我目前的方法是先编译它们,然后在生成的类文件上运行 javah。)
在只有编译的类文件可用的情况下,有没有办法生成 C 头文件,类似于以前的方式javah
?
java - JDK安装后javah丢失
我可以找到java
,javac
但我的文件夹javadoc
中没有。javah.exe
jdk\\bin
我尝试重新安装 JDK,但它仍然丢失。我怎样才能得到它,为什么它不见了?
我发现了一个类似的问题,操作系统是 Linux,但我找不到 Windows 用户的答案。
我的操作系统是 Windows 10。Java 版本是10.0.1。
java - 如何使用 javac -h?
java 10 的新特性,移除javah
了javac -h
. 但是当我尝试这个时,它说“没有源文件”。我尝试在尾部添加源文件名,类文件名,类文件名(无后缀),目录名,...,但没有用。我可以从谷歌找到帮助,页面都教如何使用javah
.
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”手动创建它们
任何帮助将不胜感激
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.
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:
正如你看到的一个用途JNIEXPORT
和JNICALL
我的方法。我也extern "C"
用于 C++ 使用。我.h
是由javah
. 我检查了Android.mk
,我没有忘记将我的.cpp
文件添加到LOCAL_SRC_FILES
. 我将我的库静态加载到 中Native.java
以使用我的静态函数。
现在我不知道错误可能来自哪里......知道吗?!
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,同时保持向后兼容性?