15

これは非常にばかげた質問かもしれませんが、私はMacでの開発に不慣れであり、ユニバーサルバイナリで苦労しています。

QT Creatorでコンパイルしているアプリケーションがあります。これは、lipoによるとi386アーキテクチャの出力を生成しています。私が理解しているように、それはMac OSX32ビット出力を生成していることを意味します。

アプリケーションは2つの外部ライブラリに依存しています。これらのライブラリの1つは、最初に./configを呼び出してから、makeを呼び出してコンパイルしています。./configは、「darwin-i386-cc用に構成されている」と述べています。ただし、makeを実行し、結果に対してlipoを呼び出した後、アーキテクチャはx86_64として報告されます。

同様に、私は別の外部ライブラリを持っています。これにはconfigureスクリプトがなく、makeを呼び出すだけでコンパイルできます。これからの出力もx86_64です。

これらの2つの外部ライブラリをコンパイルして、アプリケーションのi386出力と互換性のあるものを生成するにはどうすればよいですか?さらに良いことに、これら2つの外部ライブラリをコンパイルしてユニバーサルライブラリを生成し、アプリケーションから32ビットと64ビットの両方で動作するユニバーサルバイナリを生成するにはどうすればよいですか?

また、Macの世界の現状に基づいて、適切でユーザーフレンドリーなMac OS Xユニバーサルバイナリを作成するためにターゲットにすることが期待される他のプラットフォームはありますか?

4

3 に答える 3

14

ついにそれが機能するようになりました。

ターゲットのアーキテクチャを制御するために、手動でMakefileを編集しました。

それらの1つについて、CFLAGSで始まる行の最後に追加しました。-archi386 -arch x86_64-archppcこれによりユニバーサルバイナリが生成されました。

もう1つは、同じことをすると、コンパイルでエラーが発生することです。循環して一度に1つのアーチのみを配置する必要があり、3つすべてを作成した後、-createフラグを使用してそれらにlipoを呼び出し、ユニバーサルバイナリを作成しました。

于 2010-07-28T07:08:35.880 に答える
8

./configureの場合、次を使用できます。

./configure CFLAGS = "-arch i386 -arch x86_64" CXXFLAGS = "-arch i386 -arch x86_64" LDFLAGS = "-arch i386 -arch x86_64" --disable-dependency-tracking

--disable-dependency-trackingは重要です。そうでない場合、gcc /g++はコードのコンパイルを拒否します。

于 2013-06-04T08:06:57.613 に答える
1

私はいつもmakeではなくXcodeを使用しているので、あなたの質問の主要部分に答えることはできません。ただし、最後の部分については、10.6より前のバージョンのOSをサポートしている場合は、PowerPC(アーキテクチャコード「ppc」)用にコンパイルする必要がある場合もあります。

于 2010-07-28T05:23:47.217 に答える