gpt4 book ai didi

java - 如何生成特定的 JNI header

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:27 24 4
gpt4 key购买 nike

我有一个 .dll 库,它以下列格式导出一个函数:

_Java_folder1_folder2_folder3_JavaClassName_javamethodname@16

我无法修改 .dll。这是给我的。

我需要写一个java程序来调用原生的javamethodname。但是,我无法生成正确的头文件。如何生成具有上述指定签名的头文件?

我试过 javah -jni JavaClassName,但它没有给我想要的结果。当我从目录层次结构内部调用 javah 时,我得到一个标题,如:

Java_JavaClassName_javamethodname

当我尝试从目录层次结构外部调用 javah 时,出现错误。

还有,请问java头文件签名前面的下划线怎么取?那就是:_Java 不是 Java。

谢谢!

最佳答案

编写 Java 代码很简单:您创建一个包名为 folder1.folder2.folder3 的 Java 项目,然后将您的类 JavaClassName 放入其中,并使用 native java方法名。您不需要生成 header 或任何东西,创建 DLL 并且具有与您正在重建的类相同的类的人已经完成了这些工作。

The Java_ prefix is standard并且由 JVM-JNI 链接器添加,您无需关心它。

但是,我从字里行间了解到您对前导下划线也有疑问。它是一个“编译器装饰”,如果您只有 DLL(没有源代码,没有重新编译),您也可能完蛋了。各种编译器添加各种“装饰”以确保您不会混淆调用者 (JVM) 和被调用者 (DLL) 之间的调用约定。它有一些 observable default behavior并且可以被 various compiler options 破坏和/或定义文件(MSVC 上的 .def)。这两者都不适用于您的情况。所以你需要:

  1. 找出用于生成 DLL 的编译器
  2. 查找给定编译器生成您观察到的符号装饰的调用约定
  3. 您的 DLL 只能通过 JVM 运行,JVM 具有与 $JAVA_HOME/include/your_platform/jni_md.h 中的 JNICALL 宏定义相同的调用约定

关于java - 如何生成特定的 JNI header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126364/

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