Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JNI和Java:ant调用make还是make调用ant?_Java_Ant_Makefile_Java Native Interface_Automake - Fatal编程技术网

JNI和Java:ant调用make还是make调用ant?

JNI和Java:ant调用make还是make调用ant?,java,ant,makefile,java-native-interface,automake,Java,Ant,Makefile,Java Native Interface,Automake,我正准备第一次进入JNI(Java本机接口)世界,提供从特定于平台的C/C++代码到Java的文件系统更改通知。除非有人推荐一些我错过的优秀图书馆来做这件事 作为JNI的新手,我已经设法在接口端和库生成端找到了很多文档,但在构建本机库方面没有找到多少 我已经有了一个基于ant的现有构建,用于已有的Java源代码,所以我正在尝试确定是应该让ant调用make来创建库,还是最好在创建库之后让make调用ant 这两个选项都不是很好,但都比试图让ant调用编译器来编译代码并直接生成库要好。作为JNI的

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

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

我已经有了一个基于ant的现有构建,用于已有的Java源代码,所以我正在尝试确定是应该让ant调用make来创建库,还是最好在创建库之后让make调用ant


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

作为JNI的一个更简单的替代方案,尝试JNA:,可能会为您解决这个麻烦,而且更简单(假设它可以做您想要的事情).

我非常不喜欢make,因为它有隐含的规则集和对空格的处理。就我个人而言,我会使用cpp tasks()来进行C编译。它们不像make那么灵活,但也远没有make那么复杂,这意味着您不必为开发人员学习make而增加负担

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

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


如果你对Ant非常熟悉,不想学习新系统,那么,也可以用另一张海报链接,让你在Ant中构建C++。然后,Java可以简单地从程序输出流中读取数据,并生成所需的任何事件。如果您只想发送简单的通知,那么JNI的工作就太多了


也可以在Linux上简单地启动“NoTiFyWalk”(用一些合适的参数,参见“man InFiTyPurt”)。

< P>,你也可以尝试TATP C++任务。它们不是免费的,但它们提供了高层次的抽象,并具有发现/指定C++编译器的能力,以及迭代多个编译器/处理器体系结构/编译器配置的能力,以便多平台构建。但遗憾的是,我不得不开始为它创建新的窗口类和回调函数,这似乎是不可能的,所以我不得不回过头来使用JNI.CPP任务,这对于我所需要的非常有用,谢谢。我最终需要进行一些交叉编译,但指定用于cpptasks后端的类的功能解决了这一问题。