在我的许多Java项目中,有一段时间我需要添加本机依赖项。每次我都想知道如何以面向未来/可扩展的方式命名安装/提取位置。我看看其他人是如何做到这一点的,但我到处都看到不同的命名策略。
我知道这是一个主观问题,但我仍然非常感谢您的意见。只需选择您要评论的任何方面。
我当前的列表(打算进行中的工作):
lib/native/linux-x86/libtest.so
lib/native/linux-x64/libtest.so
lib/native/linux-armel/libtest.so
lib/native/linux-armhl-32bit/libtest.so
lib/native/linux-armhl-64bit/libtest.so (or will armhl libs be like mac dylibs and contain/cover both architectures?)
lib/native/macosx/libtest.dylib (looks like dylibs often contain both x86 and x64 architectures in one file)
lib/native/windows-x86/test.dll
lib/native/windows-x64/test.dll
我觉得这些事情难以决定:
我的大部分知识"关于我从这个答案得到的处理器架构:https://unix.stackexchange.com/a/125314/109380
编辑: - 2015-04-08:删除了32/64位标识符,因为它们似乎是冗余的,将mac 32/64位变体折叠成一行,因为它们可以包含两种体系结构。
答案 0 :(得分:1)
JNA已经对命名约定进行了两次修订。
第一个简单生成的OS系列/ CPU Arch对基于Java将为os.name
和os.arch
生成的内容,并且松散地基于许多GNU软件使用的主机/目标三元组。实际上,这些三元组只有OS和arch组件中的信息。
JVM产生的值实际上非常不一致,导致版本2。
OS系列 linux,solaris,freebsd,netbsd,darwin(OSX),android
CPU Arch x86,x86_64,ppc,ppc64等。
CPU拱门通常足以识别32位和64位。
至于ARM变体,我没有多少经验,但你做需要区分本机库中的hard和soft-float选项并明确说明。我不认为把它嵌入" arch"部分。
如果您没有预料到在任何合理的时间范围内使用它们,我不会过分担心其他变体(mips / mipsel)。
powerpc = ppc(ppc64区分64位) sunos = solaris(sparc / sparc64是太阳硬件的拱门) itanium / ia64 =你很有可能只找到一种这样的味道,ia64足以满足拱门的需求 intel = amd(来自Java-land,你不太可能发现差异)
移动/平板电脑将主要是Android或现在所谓的移动设备,通常使用ARM处理器。
"达尔文"是OSX的通用名称,多个体系结构可以捆绑在一个库中,因此通常不需要区分拱。