Mac OSX10.6コンパイラ:a動作時間の最大値と最小値を導きの経験32vs64ビット

StackOverflow https://stackoverflow.com/questions/1455720

質問

私はトラブルの理解では、gccコンパイラによるOSX10.6snow leopardでの私の経験不足と64ビット環境です。

$ cat >foo.c
main() {}
$ gcc foo.c -o foo
$ file foo
foo: Mach-O 64-bit executable x86_64
$ lipo -detailed_info foo
input file foo is not a fat file
Non-fat file: foo is architecture: x86_64

しかし、建築とインテルi386タイプしてくれてありがとうございますので最新のIntel Core2duo MacBook)

$ arch
i386

のコンパイラの目標はi686-リンゴ-darwin10

$ gcc --version 
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646)

もちろん、私がコンパイル32ビットを取得します32ビット実行形式にまとめたものです。

$ gcc -m32 foo.c -o foo
$ file foo
foo: Mach-O executable i386

が得られませんよね。デフォルトの設定のためのコンパイラをx86_64実行可能ファイルもしている場合はアーチとして32ビット機(なぜですか?Core2は64);場合でも(?)を運営し32ビットまたはカーネル;もしなければならないコンパイラを対象に、i686-リンゴ-ダーウィン。なぜですか?っている。うまコンパイル64 32?

この問いに私たちなりのgccコンパイル4.2.3のmacかもしれませんが、同じ気の問題gmpに対応しており、mpfr libibertyと答えていただけると幸いる場合がある)デfor x86_64.うまコンパイルすべx86_64?その場合、その目標はi686-リンゴ-darwin10かもしれません)?

感謝の

役に立ちましたか?

解決

Snow Leopardの上のデフォルトコンパイラはgcc4.2であり、そのデフォルトのアーキテクチャがx86_64です。 Mac用ソフトウェアを構築するための一般的な方法は、結果を結合するためにリポを使用し、その後、別のパスで複数のアーキテクチャを構築することです。 (リポのみマルチアーチファイルのうち、単一アーチ複数のアーチファイルにファイル、またはストリップarchsをコンパイルします。あなたは発見してそれは、単一アーチファイルには何の有用性を持っていません。)

コンパイラのbit化は何とは何の関係もありません。あなたは、64ビットのコンパイラ、およびその逆に32ビットのバイナリをビルドすることができます。 (何だと思いますが、コンパイラの「ターゲット」は、実際に異なっているその実行可能、である。)

カーネルのbit化は何とは何の関係もありません。あなたは、ビルドして実行、64ビットのバイナリを32ビットカーネルで起動したとき、およびその逆ができます。

あなたがリンクするときに

重要なのは、あなたがリンクするための適切なアーキテクチャを持っているかどうか、です。あなたは、32ビット、64ビットのバイナリまたはその逆に対してビルドをリンクすることはできません。だから、重要なことは、あなたが持っているライブラリをリンクすることができますので、その後、同じアーキテクチャのバイナリをビルドし、彼らは一貫していることを確認します。

、あなたのリンクライブラリのアーキテクチャが何であるかを確認することです

他のヒント

はi686-リンゴ-darwin10.0.0はautotoolsののほとんどのバージョンによって理解されていないx86_64のフォルダが含まれています。言い換えれば、私は、GCCコンパイラは、残念ながらSnow Leopardの上の冗談の短いものではありませんことを言うと思います。あなたはi686の-リンゴdarwin10.0.0に32ビットと64ビットのライブラリをバンドルする理由私を超えている。

$ ls /usr/lib/gcc
i686-apple-darwin10 powerpc-apple-darwin10

あなたはすべてのあなたのautotoolsのファイルが* 86- のダーウィンのディレクトリに見ていると、私は想像する64ビットライブラリを探して処理するように設定変更する必要があります。

は、お使いのシステムと同じように、私のMac miniはそのは明らかに64ビットのプラットフォームを使用していてもそのI386、以来、再び別の間違いが言うその64ビットのハードウェアと一緒に配布されます。

$arch
i386

アップルのツールチェーンは、複数のアーキテクチャをサポートしています。あなたはx86とx86_64のコードが含まれている脂肪のバイナリを作成したい場合は、GCCにパラメータの-arch i386 -arch x86_64を渡す必要があります。コンパイラは一度に両方のプラットフォームのために二回あなたのコードをコンパイルします。

CFLAGSに-arch i386 -arch x86_64を追加すると、あなたは一度に複数のarchsをするためにGMP、MPFR、およびその他もろもろをコンパイルすることを可能にします。その方法のlibusbビルは私のために働いています。

この答えは間違っていては下のコメント

の質問です---どのようなものでしたか?32ビット版OSX?私は知らなかったと雪豹 32ビット版としてすべてのアップルのインテルのチップは、コア2、Xeon、支援をx86_64です。

あ、Snow Leopardでのみ動作するインテルのチップスです。

編集:うSnow Leopardに始まり32ビットモードになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top