4

我正在使用 JNAerator 生成可以包含在项目中的单个 jar 文件,并且我想支持每个操作系统的动态库并将所有内容都归档在这个单个 jar 中。

到目前为止,在摆弄 JNAerator 时,我已经能够使用如下命令包含一个动态库:

java -jar jnaerator.jar test.dll test.h [...] -mode StandaloneJar

但是,这只是 packages test.dll,而我有多个系统的动态库(test_win32.dlltest_win64.dlllibtest_mac.dyliblibtest_linux_x86.solibtest_linux_amd64.so),我希望它们都打包到一个 jar 中并由一个 jar 支持。

有没有办法通过一次运行 JNAerator 来执行这种“一体化”方法,或者我必须为每个平台生成不同的 jar 文件?

4

1 回答 1

10

JNAerator 有一个-arch专门为此设计的选项,尽管文档目前对此非常模糊

java -jar jnaerator-0.12-shaded.jar \
  -arch win32 win32/test.dll \
  -arch win64 win64/test.dll \
  -arch darwin_universal mac/libtest.dylib \
  -arch linux_x86 linux_x86/libtest.so \
  -arch linux_x64 linux_amd64/libtest.so \
  test.h \
  -mode StandaloneJar \
  -jar test.jar

这将以BridJ预期的格式捆绑库(请参阅其关于嵌入式二进制文件的 wiki 页面):

unzip -l test.jar给出:

    ...
    0  04-09-15 22:45   lib/win32/test.dll
    0  04-09-15 22:45   lib/win64/test.dll
    0  04-09-15 22:45   lib/darwin_universal/libtest.dylib
    0  04-09-15 22:45   lib/linux_x86/libtest.so
    0  04-09-15 22:45   lib/linux_x64/libtest.so

库名称目前预计将准确lib<name>.(so|dylib)<name>.dll适用于每个平台,尽管如果您要求可以很容易地修复它。

(注:我是 BridJ & JNAerator 的作者)

于 2015-04-09T21:56:59.137 回答