繁体   English   中英

从 C++ header 文件生成 Java 接口

[英]Generating Java interface from a C++ header file

我们有一些需要与之交互的专有库。 这些库是 Windows DLL 或 Linux.so 文件。 我们得到了定义接口的标题。 由于我从未对本机库做过任何事情,因此我查看了 JNAerator (http://code.google.com/p/jnaerator/) 以及 BridJ 和 JNA 的东西。

使用 C++ header 文件和编译的库生成接口的简单方法是什么? 例如,通过一般采用 JNA,例如:

SomeDLL lib = (SomeDLL) Native.loadLibrary("some_dll", SomeDLL.class);

我必须将 DLL 保留在某处:如何将 DLL 与 Jar 捆绑在一起? 我使用 Maven 来构建 Jar 文件...但是 Native.loadLibrary 接口不允许直接指定路径。

JNI 编码通常是手动编写 C++ 代码以创建本机粘合方法的过程。 有一整本书可以解释它。

在某些情况下, http://jna.java.net/可以自动化或加速这个过程,但不要指望它。

除非您使用 OSGi 或 Tanukisoft 打包工具之类的工具,否则您不能“捆绑本机库”,Java 中没有为此目的的内置功能。

您可以使用 -Djava.library.path 来告诉 java 在哪里可以找到本机库,或者使用允许您指定完整路径的 System.loadLibrary 的较低级别 API 来连接这些点。

如果您的本机库依次具有依赖项,请注意与 PATH 和 LD_LIBRARY_PATH 的交互。

使用BridJ ,您可以将 DLL/.so/.dylib 与 JAR 很好地捆绑在一起,但是您必须将它(或它们)放在 JAR 中特定平台相关的路径中,该路径以“org/bridj/lib /" 并以平台+架构标识符结尾。

这是 BridJ 自己的源代码树,展示了这种原生捆绑方案: org/bridj/lib 资源目录

如果您遵守此约定,您将无需处理 PATH、LD_LIBRARY_PATH 或文件提取: BridJ.register() (在带有本机方法的@Library -annotated class 上调用)将为您完成所有工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM