Xcodeビルド設定の「アーキテクチャ」と「有効なアーキテクチャ」の違いは何ですか?


回答:


113

アーキテクチャはあなたが構築したいものであり、有効なアーキテクチャはあなたのコードベースで構築することを思いつくことができるものです。

したがって、armv7sのバイナリのみをビルドしたい場合でも、同じソースコードでarmv7とarmv6を正しくコンパイルできます。つまりVALID_ARCHS = armv6 armv7 armv7sARCHS = armv7s実際にコードで構築したいのはそれだけなので、設定します。

または、Apple-eseの場合:

ARCHS(アーキテクチャ)

スペースで区切られた識別子のリスト。バイナリの対象となるアーキテクチャ(ABI、プロセッサモデル)を指定します。このビルド設定で複数のアーキテクチャが指定されている場合、生成されたバイナリには、指定された各アーキテクチャのオブジェクトコードが含まれる場合があります。

そして:

VALID_ARCHS(有効なアーキテクチャ)

スペースで区切られた識別子のリスト。バイナリを構築できるアーキテクチャを指定します。ビルド中、このリストはARCHSビルド設定の値と交差します。結果のリストは、バイナリを実行できるアーキテクチャを指定します。結果のアーキテクチャリストが空の場合、ターゲットはバイナリを生成しません。

ソース:Xcodeビルド設定リファレンス

実際には、そのままにしVALID_ARCHSて変更を心配する必要はありませんARCHS。構築するアーキテクチャを設定するためにいじるだけです。通常、デバッグビルドはjustに設定しNATIVE_ARCHます。これは、テスト/実行するマシンのデバッグバージョンと、サポートする予定のすべてのアーキテクチャのリリースビルドのみをビルドするためです。


1
@DanMoore「結果のアーキテクチャリスト」は、ビルド時にメモリ内で行われます。
Saltymule 2014

3
@ onmyway133ほとんどの場合、VALID_ARCHSは必要ありません。特定のアーキテクチャーのみにインラインasmを記述している場合は、VALID_ARCHSを変更して、コードがそれらのアーキテクチャー以外のものを対象としていないことを反映させることができます。ただし、ほとんどの場合、Xcodeからの手がかりであり、ビルドできるアーキテクチャを示し、そこからARCHSを選択します。
ジェレミーW.シャーマン

4

Appleのドキュメントから、XcodeがビルドするバイナリはとValid Architectures 交差するリストであることがわかりArchitecturesます。

だから、私はジェレミーの答えが正しいとは思わない、と彼は言う:

したがって、armv7sのバイナリのみをビルドしたい場合でも、同じソースコード
でarmv7とarmv6を正しくコンパイルできます。したがってVALID_ARCHS = armv6 armv7 armv7s、コードで実際に構築したいのはそれだけなので、ARCHS = armv7sを設定します。

設定するとVALID_ARCHS = armv6 armv7 armv7sARCHS = armv7sバイナリXcodeのビルド結果はarmv7sになり、armv6 / armv7と互換性がなくなります。

また、armv6 / armv7 / armv7sと互換性を持たせる場合は、を設定する必要が VALID_ARCHS = armv6 armv7 armv7sありARCHS = armv6ます。このようにして、バイナリXcodeの結果はarmv6になり、armプロセッサは下位互換性があるため、armv6 / armv7 / armv7sの両方で正常に実行できます。 。


1
彼は正しかった:「あなたが実際にあなたのコードで構築たいのはそれだけだから」。
Laszlo 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.