1

Linux および Mac、32 ビットおよび 64 ビットで実行する必要があるプロジェクトの Autoconf スクリプトを開発しています。Linux では、64 ビットの検出は簡単です。 forx86_64の代わりにget を取得します。Mac でそれを行う方法がわかりません。32 ビット マシンと 64 ビット マシンの両方で. Autoconfビルトインを使用して違いを検出する方法はありますか?i386build_cpui386build_cpu

おまけの質問: 64 ビット CPU では、バイナリが 32 ビットか 64 ビットかをプログラムで検出する方法として、次の方法よりも優れた方法はありますか?

file NAME_OF_BINARY | sed -e 's/.*[^0-9]\([0-9]*\)-bit.*/\1/g'
4

3 に答える 3

2

その理由はおそらく、Mac OS X では 64 ビット CPU でもデフォルトで 32 ビット モードでコンパイルされるi386ためです。これを処理する最も簡単な方法は、おそらくユーザーにプッシュすることです。ユーザーが 64 ビット バイナリを必要とする場合は、.build_cpugcc--build=x86_64-darwinconfigure

于 2009-04-06T13:15:22.823 に答える
2

バイナリがサポートするアーキテクチャを調べるには、 file を使用するか、 の出力を解析するかotool -f [name of bin]、 の出力を解析するlipo -info [name of bin]か、ファット ファイル ヘッダーを自分で読み取ることができます (これはかなり単純で、よく文書化された構造です)。単一アーキテクチャのバイナリがある場合は、otoolコンパイルされたアーキテクチャを示す Mach-O ヘッダーについて知ることができます。

autoconf がホスト アーキテクチャとして内部的に提供するものはわかりませんが、x86_64 Mac は x86_64、i386、または ppc7400 バイナリを実行できるため、この違いはやや不自然です。Appleが推奨するユニバーサルバイナリをコンパイルするか、sysctl hw.optional.x86_64どのボックスにあるかを確認してください。

于 2009-03-04T22:21:59.903 に答える
0

覚えておくべきことの 1 つは、Mac では、複数のアーキテクチャ用にコンパイルして、"ユニバーサル バイナリ" (以前は "ファット バイナリ" と呼ばれていました) を生成できることです。-arch i386 -arch x86_64どちらを実行するかをユーザーが実行時に選択できるように、単純に both でコンパイルする方がよい場合があります (-arch ppc -arch ppc64古い PPC Mac をサポートする場合は、これを含めることもできます)。そうすれば、ユーザーがファイルシステムをあるマシンから別のマシンに移動することになった場合でも、そのマシンに適切なバイナリが残っています。詳細については、64 ビット移行ガイドを参照してください。

于 2009-04-09T14:39:40.520 に答える