2011-12-14 9 views
5

AppleはGCC 4.6またはGCC 4.7をサポートしていないので、MacPortsのGCC 4.6/4.7のビルドに切り替えました。しかし、私は "ユニバーサル"アーキテクチャで自分のコードを構築するのに問題がありました。MacportsのGCCを使ってユニバーサルコードをコンパイルできますか?

伝統的には、バイナリを少なくともi386/x86_64アーキテクチャ用にコンパイルするには、g++ -arch i386 -arch x86_64 ...を実行します。私はいくつかの検索を行い、-archオプションはリンゴのコンパイラによってのみサポートされていることに気付きました。もちろん、Macportsでは動作しませんでした。私ができる最良の方法は、私が望むアーキテクチャを指定するのに-m32/-m64オプションを使うことです。ただし、i386またはx86_64形式のバイナリのみを生成します。私が本当に望むのは、元のGCCコンパイラと同様に、両方のアーキテクチャ(Universal)でバイナリファイルを取得することです。

これはサポートされていないか、または既知の問題ですか?私は一晩中、Googleで回答を探してみましたが、役に立たないものはありません。だから私はこの問題を抱えている唯一の人なのか疑問に思っています。誰かが私にいくつかの提案を与えることができれば本当に感謝します。

BTW。私はgcc46 +universalの亜種をインストールしましたが、アーキテクチャごとに別々のバイナリをコンパイルする以外には本当に普遍的なものはありませんでした。

興。

答えて

3

lipoを使用して、異なるアーキテクチャのバイナリを1つのユニバーサルに組み合わせることができます。

+0

感謝を。私は脂肪があることを知らなかった、私は本当に必要なのは脂肪だと思う。アーチフラグを止め、lipoを使ってユニバーサルコードを生成するためにMakefileのいくつかを変更する必要があります:) –

6

ああ、私はこの問題を抱えており、かなり長い時間を費やしました。リンゴバージョンのGCC 4.2.1は実際にはいくつかのフラグ(特に-archフラグ)を尊重し、lipoを使ってオブジェクトファイルを一緒に戻して太いオブジェクトにするラッパーです。私はこのドライバを少し修正して、-archフラグを守りながらマルチポートオブジェクトファイル(32ビットと64ビットのIntel用)を作成しながら、macports GCCをラップするようにしました。

私はこれを行う方法で、かなり大規模な書き込みを掲載:作品

http://thecoderslife.blogspot.com/2015/07/building-with-gcc-46-and-xcode-4.html

関連する問題