从Java获取本机动态库文件扩展名

从Java获取本机动态库文件扩展名,java,dll,cross-platform,shared-libraries,native-code,Java,Dll,Cross Platform,Shared Libraries,Native Code,在Java中,是否有一种方法可以查询当前平台的动态库文件扩展名仅使用JDK或javax库?例如,定义的系统属性 作为第二种选择,是否有第三方Java库可以做到这一点 作为第三种选择,这个问题是不是很小,我可以轻松地滚动我自己的(例如Windows上的.dll,其他地方也是如此)?Java的“标准”本机互操作系统是。它已经存在了很长一段时间,得到了很好的支持,几乎可以处理您想要的任何本机调用场景。当然,它也支持加载动态库 你应该考虑使用JNA来处理你的项目,或者失败,看看它是如何决定正确的动态库扩

在Java中,是否有一种方法可以查询当前平台的动态库文件扩展名仅使用JDK或javax库?例如,定义的系统属性

作为第二种选择,是否有第三方Java库可以做到这一点

作为第三种选择,这个问题是不是很小,我可以轻松地滚动我自己的(例如Windows上的.dll,其他地方也是如此)?

Java的“标准”本机互操作系统是。它已经存在了很长一段时间,得到了很好的支持,几乎可以处理您想要的任何本机调用场景。当然,它也支持加载动态库


你应该考虑使用JNA来处理你的项目,或者失败,看看它是如何决定正确的动态库扩展的。

你可以使用下面的API找到你想要的东西:

System.mapLibraryName("your_library");
在Linux上,返回的是“libyour_library.so”,在Windows上返回的是“your_library.dll”。因此,如果您只对扩展感兴趣,可以执行以下操作:

final String libname = System.mapLibraryName("test");
final String libext = libname.substring(libname.lastIndexOf('.')+1);

在OSX上,使用的扩展名是
.dylib
。不确定是否值得发布完整的答案,但根据我收集的信息,Unix操作系统使用*.s。因此,OSX同时使用*.dylib和*.jnilib,Windows使用*.dll。不确定Android是否使用与Unix相同的扩展,或者其他什么。希望这有帮助。