Помилка побудови - у файлі відсутня необхідна архітектура i386


105

Я отримую цю помилку під час створення програми iPhone:

ld: попередження: у /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, у файлі відсутня необхідна архітектура i386

Це однаково для всіх рамок у моєму додатку. Це дуже дивно, оскільки цього раніше не відбувалося.


Це сталося після встановлення Snow Leopard та нового iPhone SDK (Xcode 3.2)?
авокада

8
Моя відповідь виправляє проблему. Будь ласка, перевірте.
Йорданія

9
Ще одна можливість, про яку не йдеться у відповідях, полягає в тому, що ви отримаєте цю помилку, якщо ви додасте посилання на не універсальний фреймворк (тобто ви додали armv6 / armv7 фреймворк і потім спробували створити симулятор). Це в основному викликає занепокоєння, якщо ви будували власні власні рамки.
aroth

@aroth також правильний, будь ласка, перевірте це питання
ArkReversed

Відповіді:


131

Це трапляється, коли ви додаєте рамки до свого проекту та ненавмисно копіюєте рамку у свій каталог проектів.

Виправлення полягає в тому, щоб перевірити каталог ваших проектів (де ви зберігаєте проект на диску) на наявність iphone SDK *. Framemework файлів та видалити їх.

Проект згодом буде добре розвиватися.


4
додатково протестуйте його на пристрої iOS замість Simulator.
Раптор

Якщо у вас є інший фреймворк, то зміна файлу проекту, здається, видалить посилання на це, це спрацювало тхо, і було простіше, дякую Йорданія
техаський

Не працює для мене. У моєму каталозі проектів немає файлів .framework. Fwiw, я зробив чисту, а потім збірку, і ця проблема почалася. Чистий якось повинен був зламати речі.
Альошак

85

У мене була ця сама проблема, і рішення виявилося легким виправленням. Потім створіть резервну копію, відкрийте project.pbxproj (розташований всередині пакету файлів проекту) в TextMate або TextEdit та знайдіть розділ під назвою "/ * Почати розділ XCBuildConfiguration * /". Шукайте ключ під назвою FRAMEWORK_SEARCH_PATHS та видаліть його та його вміст (один раз за конфігурацію збірки, тому я його видалив у двох місцях). Ось приклад того, що я видалив:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

Зараз мій проект будується як для пристрою iPhone, так і для iPhoneSimulator.


2
Я можу переконатися, що це працює, як описано. Здається, що Xcode може легко вийти з зв'язку зі своїми метаданими під час переміщення Xcode projs між різними комп’ютерами; у цьому випадку один має 3.0 та Leopard, а інший 3.1 та Snow Leopard. Метадані FRAMEWORK_SEARCH_PATHS в Налаштуваннях збірки відображаються як порожні, а фактичний project.pbxproj містить в собі речі.
авокада

1
Погоджений FRAMEWORK_SEARCH_PATHS також відображався як порожній у налаштуваннях збірки для мене. Однак ручне редагування файлу project.pbxproj, як описано, вирішило проблему.
Alasdair Allan

11
Це для мене не вийшло. ЯКЩО, ви ведете мене в потрібне місце, щоб подивитися. У моєму .pbxproj не було ключа FRAMEWORK_SEARCH_PATHS, а ключ з іменем LIBRARY_SEARCH_PATHS.
заколот

Я другий @rebellion. Можливо, новіші версії XCode змінили назву ключа.
Моше

Дякую, у мене також був розбитий ключ LIBRARY_SEARCH_PATHS у моєму файлі pbxproj. Ключ з’явився жирним шрифтом у Налаштуваннях проекту в Xcode 3, але без значення. Це змусило мене повірити, що щось не так. Я відкрив проект у Xcode 4 Preview 5 один раз, після чого це сталося.
mvexel

43

Тут сталося те, що Xcode загадково додав запис "Рамкові шляхи пошуку", який вказує на певний SDK пристрою iPhone. Наприклад, моє нещодавно було встановлено:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

Це змушує компілятор знаходити рамки неправильної архітектури. Видалення будь-яких значень під клавішею "Рамкові шляхи пошуку" в налаштуваннях збирання цілі вирішить проблему.


це була проблема в моєму випадку. він додав купу каталогів пошуку кожного разу, коли я додаю нову бібліотеку. навіть якщо я видаляю посилання на запит у пошуковому каталозі, який раніше був причиною проблеми.
darshansonde

"Рамкові шляхи пошуку" в моєму випадку вже порожні. Точна помилка, яку я отримую, - це ld: створення для iOS Simulator, але посилання на dylib, побудований для файлу MacOSX '/usr/lib/libSystem.B.dylib' для архітектури i386 clang: error: команда linker не вдалася з кодом виходу 1 ( використовуйте -v для перегляду виклику) Я використовую SDK 7.0 на Mavericks.
Відповідь

У мене була така ж помилка, я вилучив значення зі шляху пошуку рамки в розділі Налаштування збірки, і тепер він успішно збирається.
Нірав

10

Я просто хотів зазначити, що в XCode, якщо ви переходите до "Редагувати параметри проекту" та знаходите "Шляхи пошуку". Є поле для "Шляхи пошуку рамки". Оновлення це повинно усунути проблему, не змушуючи зламати файл проекту!

Ура!

Джессі


У мене є те саме питання, яке зводить мене з розуму абсолютно. Схоже, ви, хлопці, знаєте рішення, але я не можу знайти файл "project.pbxproj" і не можу знайти, де знаходиться "Редагувати параметри проекту".
saman01

2
У XCode 4.2.1 я знайшов таке: натисніть на назву проекту в Навігаторі проекту. На екрані властивостей, який з'явиться, виберіть вкладку "Налаштування побудови". Шляхи пошуку розташовані на цьому екрані. Видалення їх працювало на мене.
dsteele

8

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

Це зафіксувало це для мене!



7

Якщо ваша програма призначена для роботи на пристрої, переконайтеся, що ви не намагаєтеся запустити її на тренажері. Може здатися очевидним, але перевірити все одно.


5

Хоча можливо, що-небудь видалили, однак мій досвід, що щось закручується у файлі проекту. Я ще повинен чітко визначити, що це "щось". У мене були подібні проблеми, коли встановлення SDK просто добре. Є пара варіантів.

Спочатку додайте всі свої файли до нового проекту. Це, здається, зазвичай працює. Але все-таки біль.

По-друге, ви можете клацнути правою кнопкою миші проект у XCode / Отримати інформацію / Створити / Шляхи пошуку бібліотеки. Додайте нові шляхи, схожі на /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib. Додайте відповідні версії цього рядка для кожної версії (2.2.1 тощо) та платформи (тренажер або iPhoneOS). Виконайте аналогічні дії для Framework Search Paths, якщо рамки є вашою проблемою.

По-третє, це більше роботи, але надійніше - це відкрити project.pbxproj всередині MyProject.xcodeproj (Textmate хороший для цього). Знайдіть "/ * Почніть розділ XCBuildConfiguration * /", потім "LIBRARY_SEARCH_PATHS" та "FRAMEWORK_SEARCH_PATHS". Додайте або модифікуйте шляхи у відповідних випадках та збережіть файл.

У будь-якому випадку, біль у попці, і я б точно хотів уточнити причину, бо мені це траплялося пару разів. Проект складається добре, потім просто вгору і відмовляється це робити з тим, що, здається, мало причин.


Я збираюся лише розпочати новий проект. Ой колодязі.
Габе Шахбазян

Ви можете виправити настройки збірки "Шляхи пошуку рамки" на інформаційній панелі цілі.
Джон Кромарті

Я отримав помилку, але не мав проблем із рамками, описаними вище. Цікаво, що на одному комп’ютері проект можна було перевірити на SVN та створити чудово, тоді як на двох інших це раптом призвело до цієї помилки при кожній збірці. Єдиним (і досить простим) виправленням - після спроб усіляких інших рішень - було створення нового порожнього проекту та переміщення в нього всіх файлів.
mmattke

Цей метод спрацював для мене. У мене був робочий набір проектів, який раптово припинив будівництво рівно на одну конфігурацію одного дня. Без причини. Використовував техніку текстового тексту вище та зауважив, що "$ (SDKROOT) / розробник / бібліотека / рамки" відсутній у цій конфігурації. Не знаю чому, і мені не вдалося побачити це за допомогою Xcode.
Роб

4

"Редагувати параметри проекту" та знайти "Шляхи пошуку" Існує поле "Рамкові шляхи пошуку". видалити всі!!


4

Тут просто так сталося і зі мною. Завдяки чудовому партнеру ми знайшли відповідь. Ваш Xcode може вказувати на тренажер .. замінити його на пристрій IOS замість цього ... вбудований гладкий після ....


1

Запустіть команду файлу в рамках з терміналу:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

Вам слід повернути повідомлення про те, з якими архітектурами бінарний файл UIKit сумісний. Якщо ви не бачите "i386" у списку, то вам якимось чином вдалося видалити i386 версію UIKit, що означатиме, що ви не можете створити симулятор. Щоб виправити це, вам доведеться повторно встановити SDK.

Якщо у вас виникла якась інша помилка, сподіваємось, вона допоможе вам з’ясувати, у чому полягає справжня проблема.


Перевстановив sdk, і я все одно отримую таку саму точну помилку збірки.
Габе Шахбазян

У мене є ця проблема. вже перевірено рамки та шлях бібліотеки, і вони чисті. командний файл /Developer/Platforms.../UIKit.framework/UIKit говорить лише про "Mach-O - динамічно пов'язану спільну руку бібліотеки". чи дійсно потрібно встановити весь SDK? чи можу я скопіювати повну версію фреймворку?
Олександр Фрадиані

Добре вчитися! для мого випадку armv7 та i386 є, але armv6 немає!
Nianliang

1

Я просто хочу повідомити вам, що в моєму випадку у мене була та сама проблема, я зрозумів, що у мене є старіша папка Xcode під назвою Xcode3.1.3, я просто перейменував її, тому що це була старіша версія, і це зробило для мене магію.


1

Перевірте шляхи пошуку бібліотеки у своїх цільових налаштуваннях. Іноді туди входять вбиті бібліотеки, і це призведе до подібної помилки.

Ви можете видалити всі записи в цьому розділі.


0

Я просто пережив щось трохи інше, тому що я працюю над власною бібліотекою (WM_GSRecognizerLib), але помилка така ж.

Що сталося: через деякі оновлення шлях, орієнтований на lib, щоб включити (.a), знаходився у папці "Налагодження iphoneos" (де він генерується). Компіляція для Generic iOS Devices працювала чудово, але не для імітатора, скаржившись на відсутність архітектури i386.

Що я зробив для цього питання, це також включити двійкові файли з папки "Налагодження-iphoneimulator".

Це може допомогти в цій темі, оскільки тут пояснення: пристрої потребують бінарних файлів для arm64 / armv7 / armv7s, тоді як симулятору потрібен i386.


0

Моє рішення полягало у встановленні налагодження цільової налагодження симулятора ТАК, просто подивіться на статус git, щоб побачити новий рядок, доданий як архітектура лише на .project. якщо ви не встановите це, збірка запуститься для всіх архітектур і покаже деяку відсутні архітектуру, наприклад i386 чи іншу. Зверніть увагу, що, очевидно, головним питанням є використання якоїсь основи, яка реалізує якусь певну архітектуру.


-1

Я теж отримав ту саму помилку, що використовую xcode версії 4.0.2, тому що я зробив, був обраний файл проекту xcode, і з їхнього я вибрав опцію Target, я міг побачити додаток мого проекту, тому я натиснув на нього і перейшов до збірки параметр налаштувань.

Їм у варіанті пошуку я набрав шлях пошуку Framework , а видалив усі налаштування, а потім натиснув кнопку збірки, і це працювало для мене просто чудово,

Дякую та з повагою

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