Яка різниця між "Архітектури" та "Дійсні архітектури" в налаштуваннях збірки Xcode?


Відповіді:


113

Архітектури - це те, що ви хочете створити, допустимі архітектури - це ті, які ви могли б уявити, будувати за допомогою кодової бази.

Тож, можливо, ви хочете створити лише свій двійковий файл для armv7, але той самий вихідний код буде складати штрафи для armv7 та armv6. Отже VALID_ARCHS = armv6 armv7 armv7s, але ви встановлюєте, ARCHS = armv7sтому що це все, що ви насправді хочете створити зі своїм кодом.

Або в Apple-ese:

ARCHS (Архітектура)

Список ідентифікаторів, розділених пробілом. Вказує архітектури (ABI, моделі процесорів), на які націлено бінарний файл. Коли цей параметр збірки вказує більше однієї архітектури, сформований двійковий код може містити код об'єкта для кожної із зазначених архітектур.

і:

VALID_ARCHS (Дійсні архітектури)

Список ідентифікаторів, розділених пробілом. Вказує архітектури, для яких може бути побудований двійковий файл. Під час збирання цей список перетинається зі значенням налаштування збірки ARCHS; Отриманий список вказує архітектури, якими може працювати бінарний файл. Якщо результуючий список архітектури порожній, ціль не генерує бінарних даних.

Джерело: Довідка про налаштування збірки Xcode

На практиці ви залишаєтеся в VALID_ARCHSспокої і не турбуєтесь про його зміну, а просто поспішайте з тим, ARCHSщоб встановити архітектури, які ви хочете побудувати. Як правило, ви встановлюєте налагодження налагодження просто NATIVE_ARCH, оскільки ви хочете створити лише версію налагодження для машини, на якій ви будете тестувати / запускати її, і випускати версії для повного спектру архітектур, які ви плануєте підтримувати.


1
@DanMoore "Отриманий список архітектури" складається в пам'яті під час збирання.
Saltymule

3
@ onmyway133 Здебільшого ви не хочете VALID_ARCHS. Якщо ви писали вбудований ASM лише для певних архітектур, ви можете змінити VALID_ARCHS так, щоб відобразити, що ваш код більше не призначений для жодної архітектури. Здебільшого, це лише підказка від Xcode, яка вказує, для яких архітектур він може побудувати, і ви вибираєте звідти для своїх ARCHS.
Джеремі В. Шерман

4

З документа Apple ми знаємо, що бінарний Xcode будуватиметься списком, який Valid Architectures перетинається Architectures.

Отже, я не думаю, що відповідь Джеремі є правильною, як він каже:

Тож, можливо, ви хочете створити лише свій двійковий файл для armv7, але той самий вихідний код буде
складати штрафи для armv7 та armv6. Отже VALID_ARCHS = armv6 armv7 armv7s, але ви встановлюєте ARCHS = armv7s, тому що це все, що ви насправді хочете створити зі своїм кодом.

Коли ви встановлюєте VALID_ARCHS = armv6 armv7 armv7sта встановлюєте ARCHS = armv7s, результат бінарного Xcode буде будувати armv7s - він не може бути сумісний із armv6 / armv7.

І якщо ви хочете сумісні з armv6 / armv7 / armv7s ,, ви повинні встановити VALID_ARCHS = armv6 armv7 armv7sі ARCHS = armv6. Таким чином, результат бінарного Xcode буде будуватися armv6, і він може працювати нормально на обох armv6 / armv7 / armv7s, оскільки армейський процесор є сумісним назад .


1
Він мав рацію: "тому що це все, що ви насправді хочете створити зі своїм кодом".
Ласло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.