2014-02-13 114 views

回答

2

这通常是不可能的几个.so文件从一些*创建一个.jar文件.so文件。

A .so(共享对象)是一个可以动态加载的库,例如Windows系统上的.dll。这些库包含本机编译的代码,并可能依次依赖于其他库。 A .jar是Java虚拟机(JVM)的归档文件。它也可以动态加载,但它包含.class文件,其中包含为JVM编译的代码。你可以将机器代码中的程序翻译成JVM字节码(或者写一个仿真器,例如x86架构),但是这会很难做到,因为它的执行模型很难做到, CPU和JVM差别很大,例如在他们的记忆治疗中。结果可能会非常低效。而重新编译一个动态加载的库将是相当不可移植的,从而破坏了JVM的目的。

如果您只是想与来自JVM的本机库(例如用Java编写的程序)接口,那么您可以使用Java Native Interface(JNI)。在这种情况下,你必须围绕.so编写一个C或C++包装器,然后才能调用这些函数。

我不知道你为什么提到Perl。虽然一个很好的语言,它不能帮助这里。

+2

你可以在'.jar'文件里放一个'.so'文件,就像你可以把鸭子放在火鸡里面一样。它会有用吗?也许,也许不是。你不能将它作为一个程序执行,但它将是一个'.jar'文件。 –