用Java加载通用二进制文件

用Java加载通用二进制文件,java,macos,java-native-interface,universal-binary,Java,Macos,Java Native Interface,Universal Binary,我有一个Java小程序,它通过JNI加载本机代码。一切都很顺利,直到我升级到雪豹,然后Safari决定装傻。事实证明,Safari在64位模式下只能加载64位二进制文件。(您可以将其置于32位模式,但这不是一个选项。)我更改了构建系统(g++),以支持构建通用二进制文件,而不是单个32位二进制文件。我已经成功地创建了一个通用二进制文件,但是当我尝试将它加载到我的applet中时,我得到了一个不满意的链接异常,它说没有找到合适的图像,并且无法映射它。以前有人处理过这个问题吗 要了解更多信息。。。

我有一个Java小程序,它通过JNI加载本机代码。一切都很顺利,直到我升级到雪豹,然后Safari决定装傻。事实证明,Safari在64位模式下只能加载64位二进制文件。(您可以将其置于32位模式,但这不是一个选项。)我更改了构建系统(g++),以支持构建通用二进制文件,而不是单个32位二进制文件。我已经成功地创建了一个通用二进制文件,但是当我尝试将它加载到我的applet中时,我得到了一个不满意的链接异常,它说没有找到合适的图像,并且无法映射它。以前有人处理过这个问题吗

要了解更多信息。。。 当我在终端中输入'file native.dylib'时,原来的32个二进制文件显示为:
Mach-O动态链接共享库i386

当我对通用二进制文件做同样的处理时,结果是:
native.dylib:Mach-O通用二进制文件,具有两种体系结构
native.dylib(用于架构i386):Mach-O对象i386

native.dylib(适用于体系结构):Mach-O 64位对象
x86\u 64
我发现了我所做的使事情无法工作的事情。在改变所有makefile(大约有10个)中的内容时,我没有正确地创建.a。我有一种奇怪的方法,分别构建源代码的每个arch版本,然后将它们组合在一起。我现在意识到这对我来说是愚蠢的,但你要生活和学习。。。。不管怎样,我决定使用libtool,而不是做所有这些帮助很大的事情。我没有单独构建所有的拱门,而是将多个拱门标志传递给了g++并将它们与libtool合并在一起。

也许这篇文章相关?