файл был создан для архива, который не связан с архитектурой (i386)

Я должен построить статическую библиотеку. Я хочу использовать в своем приложении для iPhone и iPad. Когда я пытаюсь запустить симулятор, я получаю ошибки связывания. Я новичок в разработке iOS. любезно помочь;

ld: warning: ignoring file /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a, file was built for archive which is not the architecture being linked (i386) Undefined symbols for architecture i386:
"_OBJC_CLASS_$_netUtils", referenced from: objc-class-ref in ViewController.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я попытался добавить i386 в архитектуру. но не повезло

Ответы на вопрос(10)

Имел ту же проблему и пробовал разные решения со страницы безрезультатно. У меня все еще было сообщение о том, что моя библиотека не была создана для arm64.

Наконец, как я решил это:

opened the project.pbxproj for the library in a text editor searched for VALID_ARCHS there were 4 occurrences, 2 of which did not contain arm64 I manually added arm64 in the chain (VALID_ARCHS = "arm64 i386 armv7 armv7s") rebuild the lib and it was all right

Иногда кажется, что параметры сборки, отображаемые XCode, являются неполными и не соответствуют точно файлу проекта.

Если я получу предупреждение об игнорировании файла - я бы запустилlipo -info на проигнорированный файл, чтобы найти его архитектуру, как показано ниже

lipo -info libnetUtils.a

Это будет выводить либо i386, armv6, armv7, armv7s, x86_64 и т. Д. В общем, эта архитектура должна соответствовать вашей целевой платформе сборки. Например.

i386 = ios simulator or 32 bit build on mac os x armv6 armv7 arm7s = ios device x86_64 = 64 bit build on mac os x

В зависимости от несоответствия, вы должны перестроить свою библиотеку для вашей целевой платформы или изменить свою целевую платформу.

Примечание: для толстых двоичных файлов,lipo -info напечатает комбинацию вышеперечисленных архитектур.

 19 нояб. 2014 г., 02:39
Хотя это не отвечало ОП. Это отличный инструмент для устранения этой проблемы. Я хотел бы знать, как построить двоичный файл со всеми вышеупомянутыми архитектурами?
 19 нояб. 2014 г., 03:09
Неважно, я нашел ответ здесь:stackoverflow.com/questions/2793392/… который использует липосакцию для объединения сборок с использованием «-создать»; флаг

Иногда такие ошибки вас раздражают!

Удаление производных данных работает для меня:

Шаги, чтобы исправить

1) В XCODE & gt; Windows & gt; Проект & gt; Выберите свой проект & gt; Удалить производные данные & gt; Выйдите из XCODE и снова откройте его & gt; Если вы получили встроенный MAC-O-Linker, произошла ошибка & gt; Refereэтот ссылка & gt; Очистить и построить снова.

 21 нояб. 2016 г., 21:28
Для удаления производных данных в XCode 8, смотрите здесь:stackoverflow.com/questions/38016143/…

ВашlibnetUtils.a строится для другой архитектуры, чем ваша цель.

Проверьте настройки сборки libnetUtils. Архитектуры, для которых он создается, и список поддерживаемых архитектур должны быть (слабым) расширенным набором архитектуры вашей целевой системы. Сложность заключается в том, что результирующая архитектура распространяется на различные параметры: «Архитектуры», «Только для активной архитектуры». и «Действительные архитектуры».

& quot; Построить только активную архитектуру & quot; настройки делают это особенно запутанным. Например, предположим, что вы строите для симулятора. Если & quot; Построить только активную архитектуру & quot; для параметра Debug установлено значение NO, при этом будут собраны все архитектуры, перечисленные в разделе «Архитектуры». и «Действительные архитектуры»; (вероятно, armv7 и т. д.). Но если в libnetUtils для этого параметра установлено значение «Да» (отладка: да), то он собирается только для i386. Поэтому, когда ваш компоновщик пытается связать armv7 с i386, он не работает.

Это означает, что библиотека, которую вы пытаетесь использовать, не была скомпилирована универсально для симулятора iOS (символы i386 для Mac). Запуск его на реальном устройстве должен работать нормально, хотя.

Эта проблема не возникает, когда мы запускаем приложение на устройстве. Вы можете проверить это, запустив код на устройстве iOS.

Я на самом деле не знаю, верен ли мой совет, но попробуйте проверить это:

Select your project Select &qu,ot;Build Settings" Check Architectures: Valid architectures should be "armv6 armv7" Supported platforms should be "iphonesimulator iphoneos" (maybe iPad, I don't know) Base SDK – your iOS SDK (I have iOS 5.0).

Не суди меня, если я очевиден капитан :)

 21 авг. 2012 г., 19:24
В дополнение к совету Александра я бы посоветовал вам убедиться в том, что «Build Active Architecture Only» только для сборки. настройка установлена на «NO». Это сбило меня с толку недавно.

У меня также была архитектура armv7s. Я удалил его и убедился, что armv6 и armv7 были единственными в списке. Теперь работает

 02 апр. 2014 г., 09:39
Вы не должны исключать armv7s
Решение Вопроса

После борьбы с той же самой проблемой и после всех принятых ответов об обновлении настроек сборки, очистке пути поиска компоновщика и т. Д., Я наконец нашел ответ, который работал для меня.

Перед сборкой убедитесь, что вы выбрали правильный тип (iPhone Simulator) вместо iOS Device. Затем восстановите. В противном случае вы пытаетесь использовать библиотеку, созданную для устройства iOS (процессор руки), на симуляторе на вашем Mac (i386). Должен был быть очевидным, но не был.

Before:

iOS Device Settings

After:

iPhone 5.1 Simulator Settings

Теперь просмотрите группу продуктов в навигаторе & gt; щелкните правой кнопкой мыши свою статическую библиотеку (файл .a) & gt; Покажите в Finder, что вы заметите, что он находится в папке Debug-iphonesimulator вместо Debug-iphoneos. Первоначально я не обращал внимания на имя папки, или мог бы подумать об этом раньше.

Надеюсь это поможет.

 10 мар. 2018 г., 17:43
Отлично. Это действительно решило это.
 13 дек. 2013 г., 01:28
Обновление: после xcode 5 и 64-битного симулятора iPhone у меня возникает ошибка при сборке libPods.a для другой архитектуры, но в других симуляторах этого не происходит: \
 18 дек. 2014 г., 15:50
@Miroslav Я должен был сказать, что да, потому что мне нужно развернуть в отладке.
 22 июл. 2014 г., 13:56
@ Nour1991 попробуйте настроитьBuild Settings -> Build Active Architecture Only вNo
 23 мая 2013 г., 03:03
Это решило это для меня. Есть много способов создать архитектуру, которую вы не планируете, и будущие пользователи, возможно, захотят просмотреть многие из этих ответов, чтобы увидеть, если вы найдете тот, который подходит вам!

Для меня это было исправлено установкаBuild Active Architecture Only вMultiple valuesЧтобы сделать это, вы должны расширить его и установитьDebug вYES а такжеRelease вNo, И теперь, это компилируется на моем устройстве.

Ваш ответ на вопрос