7

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

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

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

这两个选项都不是非常好,但似乎都比试图让 ant 调用编译器来编译代码并直接生成库要好。

4

5 回答 5

3

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

于 2008-08-18T22:36:49.967 回答
3

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

于 2008-08-18T23:19:59.910 回答
1

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

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

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

于 2008-09-17T04:50:06.820 回答
1

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

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

于 2008-09-17T20:55:51.100 回答
0

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

于 2009-07-13T18:40:01.853 回答