Мне нужно построить статическую библиотеку. Я хочу использовать в своем приложении для iPhone и iPad. Когда я пытаюсь запустить симулятор, я получаю ошибки связывания. Я новичок в разработке iOS. любезно помогите;
ld: предупреждение: игнорирование файла /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a, файл был создан для архива, который не является связываемой архитектурой (i386). Неопределенные символы для архитектуры i386:
"_OBJC_CLASS _ $ _ netUtils", на которое ссылается : objc-class-ref в ViewController.o ld: символы не найдены для архитектуры i386 clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов)
Я пробовал добавить i386 в Архитектуры. но не повезло
Build Settings -> Build Active Architecture Only
наNo
Иногда такие ошибки вас раздражают!
Удаление производных данных работает для меня:
Шаги по исправлению
1) В XCODE> Windows> Проект> Выберите свой проект> Удалить производные данные> Выйти из XCODE и снова открыть его> Если вы получили сбойную ошибку сборки MAC-O-Linker> Перейдите по этой ссылке> Очистить и снова построить.
источник
Ваш
libnetUtils.a
строится для архитектуры, отличной от вашей целевой.Проверьте настройки сборки libnetUtils. Архитектуры, для которых он создается, и список поддерживаемых архитектур должны быть (слабым) надмножеством архитектуры вашей целевой системы. Сложность здесь в том, что результирующая архитектура распределена по различным параметрам: «Архитектуры», «Создавать только активную архитектуру» и «Допустимые архитектуры».
Это особенно сбивает с толку настройки «Только строить активную архитектуру». Например, предположим, что вы строите для симулятора. Если для параметра «Построить только активную архитектуру» для параметра «Отладка» установлено значение «НЕТ», будут построены все архитектуры, перечисленные в «Архитектурах» и «Допустимые архитектуры» (возможно, armv7 и т. Д.). Но если в libnetUtils для этого параметра установлено значение Да (Отладка: Да), он создается только для i386. Поэтому, когда ваш компоновщик пытается связать armv7 с i386, он терпит неудачу.
источник
Если я получаю предупреждение об игнорировании файла - я бы запустил
lipo -info
игнорируемый файл, чтобы найти его архитектуру, как показано нижеlipo -info libnetUtils.a
Это напечатало бы i386, armv6, armv7, armv7s, x86_64 и т. Д. В общем, эта архитектура должна соответствовать вашей целевой платформе сборки. Например
В зависимости от несоответствия вам придется либо перестроить библиотеку для целевой платформы, либо изменить целевую платформу.
Примечание: для толстых двоичных файлов
lipo -info
будет напечатана комбинация вышеуказанных архитектур.источник
На самом деле я не знаю, верен ли мой совет, но попробуйте проверить это:
Не судите меня, если я капитан очевидный :)
источник
Это означает, что библиотека, которую вы пытаетесь использовать, не была универсально скомпилирована для симулятора iOS (символы i386 предназначены для Mac). Однако запуск его на реальном устройстве должен работать нормально.
источник
Была та же проблема, и пробовал разные решения со страницы, но безрезультатно. У меня все еще было сообщение о том, что моя библиотека не была создана для arm64.
Наконец, как я это решил:
Иногда кажется, что параметры сборки, отображаемые XCode, являются неполными и не соответствуют точно файлу проекта.
источник
Вы также должны проверить, совпадает ли цель развертывания в настройках сборки для зависимых и зависимых. Я заметил, что у меня iOS 13 была настроена для цели статической библиотеки, а iOS 10.0 была определена для платформы, которая использует эту библиотеку. Переключение на 10.0 решило проблему.
источник
Для меня это было зафиксировано установив
Build Active Architecture Only
для тогоMultiple values
, чтобы сделать это, вы должны расширить его и установитьDebug
вYES
иRelease
кNo
. И теперь он компилируется на моем устройстве.источник
Эта проблема не возникнет, когда мы запустим приложение на устройстве. Вы можете проверить это, запустив код на устройстве iOS.
источник
У меня тоже была архитектура armv7s. Я удалил его и убедился, что в списке указаны только armv6 и armv7. Это работает сейчас
источник