如何在一个标题下使用JNAerator和多个动态库?

FTh*_*son 4 java java-native-interface cross-platform shared-libraries jnaerator

我正在使用JNAerator生成一个我可以包含在项目中的jar文件,我想支持每个操作系统的动态库并在这个jar中进行全部归档.

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

java -jar jnaerator.jar test.dll test.h [...] -mode StandaloneJar
Run Code Online (Sandbox Code Playgroud)

然而,这只包test.dll,而我有多个系统(动态库test_win32.dll,test_win64.dll,libtest_mac.dylib,libtest_linux_x86.so,和libtest_linux_amd64.so),我想都已经打包成和一个罐子的支持.

有没有办法用一次JNAerator运行这种"一体化"方法,还是我必须为每个平台生成一个不同的jar文件?

zOl*_*ive 9

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
Run Code Online (Sandbox Code Playgroud)

这将以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
Run Code Online (Sandbox Code Playgroud)

目前该库的名称预计是准确lib<name>.(so|dylib)<name>.dll每一个平台,虽然很容易被固定,如果你问.

(注意:我是BridJ和JNAerator的作者)