我即将第一次进入 JNI(Java 本机接口)的世界,以提供从平台特定的 C/C++ 代码到 Java 的文件系统更改通知。除非有人推荐一些我错过的出色的图书馆来做这件事。

作为 JNI 的新手,我已经设法找到了很多关于 JNI 接口方面和库生成方面的文档,但我还没有找到太多关于构建本机库的文档。

我有一个基于 ant 的现有构建,用于预先存在的 Java 源代码,因此我正在尝试确定是否应该让 ant 调用 make 来创建库,或者最好在创建后让 make 调用 ant图书馆?

这两个选项都显得非常好,但两者似乎都比尝试让 ant 调用编译器来编译代码并直接生成库更好。

有帮助吗?

解决方案

我非常不喜欢 make,因为它隐含的规则集和对空白的处理。我个人会使用 cpp 任务(http://ant-contrib.sourceforge.net/cpptasks/index.html) 进行我的 C 编译。它们不像 make 那样灵活,但也远没有那么复杂,这意味着您不必为开发人员增加学习 make 的负担。

其他提示

作为 JNI 的更简单替代方案,请尝试 JNA: https://jna.dev.java.net/, ,可能会为你解决这个麻烦并且更简单(假设它可以做你想要的事情)。

我会完全跳过 JNI,并使用在标准输出上写入通知的外部程序。然后,Java 可以简单地从程序输出流中读取并生成任何必要的事件。如果您只想发送简单的通知,JNI 的工作量就太大了。

另外,在 Linux 上,您可以简单地启动“inotifywait”(使用一些合适的参数,请参阅“man inotifywait”)。

我现在正在做类似的事情。请注意,使用 swig.org 中的 swig 通常更容易,因为它会为您生成本机库的存根。

对您问题的简短回答是,ant 文件应该在构建 java 库之后运行 make 文件,因为本机库依赖于 swig 生成的标头,该标头是从 java 类文件生成的。

如果你对ant超级熟悉,并且不想学习新的系统,那么 http://ant-contrib.sourceforge.net/cpptasks/index.html, ,也由另一张海报链接,将让您在 ant 中构建 C++。

您还可以尝试 terp C++ 任务 代码网. 。它们不是免费的,但它们提供了高水平的抽象,以及发现/指定 C++ 编译器的能力以及为多平台构建迭代多个编译器/处理器架构/编译器配置的能力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top