1

JNIを介してネイティブコードをロードするJavaアプレットがあります。Snow Leopardにアップグレードするまではすべて問題なく動作し、その後Safariは馬鹿げていると判断しました。Safariは、64ビットモードの場合にのみ64ビットバイナリをロードすることがわかりました。(32ビットモードにすることはできますが、それはオプションではありません。)ビルドシステム(g ++)を変更して、単一の32ビットバイナリではなくユニバーサルバイナリのビルドをサポートするようにしました。ユニバーサルバイナリを正常に作成しましたが、アプレットにロードしようとすると、適切な画像が見つからず、マップできないという不満足なリンク例外が発生します。誰かがこれに以前に対処したことがありますか?

追加情報について...ターミナルで「filenative.dylib」と入力すると、元の32バイナリは次のように出力されました。Mach
-O動的リンク共有ライブラリi386

そして、ユニバーサルバイナリに対して同じことをしたとき、次のようになりました
。native.dylib:2つのアーキテクチャを持つMach-Oユニバーサルバイナリ
native.dylib(アーキテクチャi386の場合):Mach-Oオブジェクトi386
native.dylib(アーキテクチャの場合x86_64): Mach-O64ビットオブジェクトx86_64

4

1 に答える 1

0

自分が何をしたか、それが物事を機能させていないことがわかりました。すべての Makefile (約 10 個) を変更する際に、.a を正しく作成していませんでした。ソースの各アーキテクチャ バージョンを個別に構築し、それらを一緒にリポするという奇妙な方法がありました。私はそれが私の側ではばかげていたことに気づきましたが、あなたは生きて学びます.... とにかく、私は、多くのことをするのではなく、libtoolを使用することでそれを決定しました。すべてのアーキテクチャを個別にビルドする代わりに、複数のアーキテクチャ フラグを g++ に渡し、それらを libtool でマージしました。

于 2009-10-27T14:23:05.320 に答える