将c ++可执行程序转换为共享对象

时间:2011-06-02 10:51:51

标签: java c++ java-native-interface

我有一个奇怪的问题..我有JAGS软件的源代码,我可以在solaris i86中编译它生成一个可执行文件..它工作正常...现在问题是

  1. 我想从JAVA调用这个可执行文件,并希望我能够这样做..
  2. 现在我想使用没有可执行文件的相同源代码,并希望创建一个可以从JNI中使用java触发的共享对象。
  3. 是否可以修改make文件并生成共享对象而不是可执行文件?

1 个答案:

答案 0 :(得分:0)

您可以从java调用可执行文件。只是一个问题:

String[] cmd = { "/path/to/program", "arg1", "arg2" };
Process proc = Runtime.getRuntime().exec( cmd );

然后,您可以使用proc通过标准I / O流与命令进行通信,并等待它完成。

现在,如果你想沿着JNI路径前进,你需要编写一些额外的代码来充当java和C之间的JNI层。这一层负责跟踪分配的C内存并在C数据之间进行转换类型和Java数据类型。然后,该层可以调用其他源代码中的函数(但可能不是主函数)。然后,您需要修改/创建一个makefile,它将您的新JNI层源代码与您已经拥有的源代码链接到.dll / .so中。然后,您需要编写位于JNI层之上的java类。

您选择哪种方法实际上取决于您希望本机代码执行的操作以及您需要多少交互。