После обновления xcode до 8.0 мой проект приложения с ошибкой для целевого устройства, но успешно сработает для симулятора.
Ошибка: ld: библиотека не найдена для -lcrt1.3.1.o
Какое решение для этой ошибки.
После обновления xcode до 8.0 мой проект приложения с ошибкой для целевого устройства, но успешно сработает для симулятора.
Ошибка: ld: библиотека не найдена для -lcrt1.3.1.o
Какое решение для этой ошибки.
Проведя много времени, я наконец получил причину этой ошибки.
Ошибка: ld: библиотека не найдена для -lcrt1.3.1.o
Решение: Если ваш источник проекта имеет цель развертывания от iOS 5.0, то измените его на iOS 6.0 или более позднюю версию, и ваша ошибка будет исправлена. Теперь это нормально работает и для устройства.
Ура!!!
crt1.3.1.o
- это библиотека, которая была включена в более старые iOS (и, следовательно, их SDK), но больше не присутствует в новых SDK. Однако, когда для цели развертывания проекта установлено более старое iOS (< 6.0, как обнаружил @Sandy), Xcode все еще пытается связать его.
Чтобы поддерживать поддержку iOS 5.x в новых Xcodes, нужно только скопировать crt1.3.1.o
из старого Xcode в соответствующий …/usr/lib/
dir в новом Xcode. Xcode будет использовать только crt1.3.1.o
, если целевой объект развертывания < 6.0- для проектов с целью развертывания ≥6.0 crt1.3.1.o
остается неиспользуемым, а полученный связанный двоичный код идентичен тому, что было pre- …/usr/lib/crt1.3.1.o
-addition.
Чтобы получить новый Xcode для правильной ссылки проекта с целью развертывания iOS 5.x:
Загрузите старый Xcode, который все еще имеет crt1.3.1.o
из https://developer.apple.com/downloads/.
Я использовал Xcode 5.1.1, хотя любой Xcode, поддерживающий iOS 5.x, должен работать (что, в соответствии с Википедией должно быть Xcode 4.2-6.4).
Откройте Xcode .dmg
и на образ диска найдите файл /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS….sdk/usr/lib/crt1.3.1.o
.
Поскольку я использовал Xcode 5.1.1, мой был в …/iPhoneOS7.1.sdk/usr/lib/crt1.3.1.o
.
Скопируйте в тот же каталог Xcode.app
-relative в новом Xcode: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/crt1.3.1.o
.
My newer-Xcode в момент написания - это последняя версия Xcode 8.1 (в состав которой входят IOS 10.1 SDK и загружаемая поддержка iOS Simulator для iOS 8.1).
Обратите внимание, что вам нужно будет повторно выполнить эти шаги после каждого обновления Xcode, поскольку стандартный процесс обновления Xcode должен просто сдуть Xcode.app
и все, что содержится в обновленном Xcode.app
.
Также обратите внимание, что я успешно протестировал это с помощью Xcode 8.1 для создания приложения с целью развертывания iOS 5.0, который будет работать как на моем iOS 10.1.1 iPad Air 2, так и на моем iOS 6.1.3 iPhone 4S. Однако я не отправил сборку, используя этот процесс в iOS App Store. Хотя маловероятно, что сертификация Apple будет иметь проблемы с этим (так как это, в конце концов, их собственная библиотека iOS crt1.3.1.o
, и поскольку нет другого способа создать приложение против последнего SDK, поддерживая поддержку iOS до 5.x, что почти наверняка является чем-то, что некоторые корпоративные клиенты все еще делают), я не могу сделать твердое обещание здесь.
удалите строки -lPods- (someCocoaPod) в списке "Другие флаги компоновщика", но только если $(унаследовано) находится вверху. Сначала я был не уверен, но убедительным признаком было то, что я все еще видел ссылки на мои коко-каподы, когда покидал режим редактирования (унаследовал). Я тестировал в debug и release, оба из которых давали мне ошибки, и проблема была немедленно решена.
Вместо использования библиотек из старой установки Xcode вы также можете просто перекомпилировать их из источников: https://github.com/mringwal/csu-ios