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:

  1. Загрузите старый Xcode, который все еще имеет crt1.3.1.o с https://developer.apple.com/downloads/.

    Я использовал Xcode 5.1.1, хотя любой Xcode, поддерживающий iOS 5.x, должен работать (который, согласно Википедии, должен быть Xcode 4.2-6.4).

  2. Откройте 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 ,

  3. Скопировать туда же 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

Другие вопросы по тегам