【问题标题】:Loading a universal binary with Java使用 Java 加载通用二进制文件
【发布时间】:2010-12-08 00:21:36
【问题描述】:

我有一个通过 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

【问题讨论】:

标签: java macos java-native-interface universal-binary


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2017-12-11
    • 2021-01-13
    • 2013-08-30
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多