在java中打包C二进制文件

时间:2014-07-10 23:44:04

标签: java c

我有一个java程序,需要调用C二进制文件来执行一些计算。

我目前正在这样做的方式是使用ProcessBuilder并将C程序作为外部二进制文件运行。

但是,我想将此程序迁移到云中,因此我需要将所有内容都放在一个java项目中,并且将C程序作为外部二进制文件调用是不可能的。有没有办法让我以某种方式将C二进制文件打包到jar中并在我的程序中调用它?

2 个答案:

答案 0 :(得分:3)

您的二进制文件可以打包到JAR中。当程序运行时,您可以从JAR中抽取二进制文件并将其存储到临时文件中,然后执行它。

当JAR运行时,其路径可以获得:

File temp = File.createTempFile("temp_name", "suffix");
temp.deleteOnExit();
InputStream input = YourClass.class.getClassLoader().getResourceAsStream("your_binary_file");
WRITE_INPUTSTREAM_TO_FILE(input, temp);

现在,你有一个可以执行的临时文件!

答案 1 :(得分:1)

这是一个解决方案,但我不认为它是一个好的解决方案。我仍然认为部署带有JNI接口的C库是一个更好的选择。

1. Crete C library with JNI interfaces exposed.
2. Pack the library to a JAR.
3. At run time use ClassLoader.getResourceAsStream to get a stream to your resource
4. Store the stream to a file
5. Use System.load(path-to-file) to load the library

我忽略了有关JNI的详细信息 - 这是一个你应该自己探索的大而独立的话题。

如果您只想运行可执行文件而不使用C lib,则可以跳过上面的#1和#5,只需运行您存储在文件中的可执行文件。