1

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

有关更多信息...当我在终端中输入“文件 native.dylib”时,原来的 32 二进制文件显示为:
Mach-O 动态链接共享库 i386

当我对通用二进制文件执行相同操作时,结果如下:
native.dylib:具有 2 个架构的 Mach-O 通用二进制
native.dylib(用于架构 i386):Mach-O 对象 i386
native.dylib(用于架构x86_64): Mach-O 64 位对象x86_64

4

1 回答 1

0

我发现我所做的事情是让事情无法正常工作。在更改所有 Makefile(大约有 10 个)中的内容时,我没有正确创建 .a。我有一些奇怪的方法,分别构建源的每个拱版本,然后将它们 lipo'ed 在一起。我现在意识到这对我来说是愚蠢的,但你生活和学习......无论如何,我决定通过使用 libtool 而不是做所有这些有很大帮助的事情。我没有单独构建所有拱门,而是将多个拱门标志传递给 g++ 并将它们与 libtool 合并在一起。

于 2009-10-27T14:23:05.320 回答