ld: библиотека не найдена для ошибки -lcrt1.3.1.o при запуске приложения на устройстве с xcode 8.0 с iOS10
После обновления xcode до 8.0 мой проект приложения компилируется с ошибкой для целевого устройства, но выполняется успешно для симулятора.
Ошибка как:
ld: библиотека не найдена для -lcrt1.3.1.o
Какое решение для этой ошибки.
4 ответа
Потратив много времени, я наконец-то нашел причину этой ошибки.
Ошибка: 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 в новых X-кодах, нужно всего лишь скопировать crt1.3.1.o
от старого Xcode к соответствующему …/usr/lib/
dir в более новом Xcode. Xcode будет использовать только crt1.3.1.o
если цель развертывания <6.0 - для проектов с целью развертывания ≥6.0 crt1.3.1.o
остается неиспользованным, и полученный связанный бинарный файл идентичен тому, что был предварительно …/usr/lib/crt1.3.1.o
-сложение.
Чтобы заставить более новый 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
-относительный каталог в вашем новом Xcode:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/crt1.3.1.o
,Мой новый 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) в списке "Другие флаги компоновщика", НО только в том случае, если $(унаследовано) находится вверху. Сначала я был неуверен, но обнадеживающим признаком было то, что я все еще видел ссылки на свои кокосопод, когда вышел из режима редактирования (унаследовано). Я тестировал в отладке и выпуске, оба из которых давали мне ошибки, и проблема была немедленно решена
Вместо использования библиотек из более старой установки XCode, вы также можете просто перекомпилировать их из источников: https://github.com/mringwal/csu-ios