Ошибка компоновщика XCode: файл слишком мал для архитектуры x86_64
Я разрабатываю приложение в Xcode.
Когда я пытаюсь собрать, появляется эта ошибка:
ld: in /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o, file too small for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Кто-нибудь знает в чем дело?
9 ответов
Кража ответа @ Мартина-Баулига:
Попробуйте полную перестройку / очистку. Вполне возможно, что предыдущая сборка была ненормально прервана, из-за чего файл TWRAppDelegate.o поврежден или имеет нулевой размер.
Я обычно добавляю пробел (может быть любой символ в этом отношении) к рассматриваемому файлу, удаляю его и затем сохраняю. Проще и быстрее, чем чистая сборка.
Чтобы автоматически решить эту проблему Build Script Phase
можно добавить Перейти к Xcode -> Ваш проект -> Ваша цель -> Фазы сборки -> + -> Фаза нового запуска скрипта
Переименуйте его в Xcode Link Fix
и переместить его выше Compile Sources
фаза. Вставьте это в тело скрипта:
dirname "$LD_DEPENDENCY_INFO_FILE" | xargs -I {} find {} -size 0 | while read -d $'\n' file; do
rm "$file"
done
Этот скрипт проверяет наличие объектных файлов с нулевым размером и удаляет их, поэтому, когда компиляция будет выполнена на следующем шаге, она будет успешной.
Вам нужно добавить этот скрипт для каждой цели приложения, если у вас их много.
Этот сценарий занимает ~0,1 секунды для запуска и спасает вас от полной перестройки проекта.
Просто удалите этот файл, запустив cmd в вашем терминальном приложении:
rm /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o
Быстрый способ исправить ошибку без полной очистки кэша:
- Открыть файл, описанный по ошибке (в случае этого вопроса
TWRAppDelegate
) - cmd + A
- cmd + X
- Перестроить - не удалось
- cmd + V
- Перестроить - успешно
Вы можете просто удалить файл TWRAppDelegate.o и продолжить сборку. Скопируйте полный путь, указанный в сообщении об ошибке, и вставьте его за командой "rm" в вашем терминале. Нет необходимости чистить / перестраивать, удалять производные данные, добавлять / удалять файл из проекта и т. Д.
Поскольку создание чистого проекта может занять слишком много времени, для тех, у кого есть доступ к файлу, поврежденному в кеше, существует более короткий путь:
- Удалить файл (Удалить ссылку)
- Построить проект
- Вставить файл
- Построить проект
Полная версия, поэтому у вас нет проблем с поиском файла:
- Найдите файл в навигаторе проекта Xcode
- Щелкните правой кнопкой мыши файл и нажмите "Показать в поиске" (открывает поиск в том месте, где находится файл)
- Выберите файл в Xcode и нажмите клавишу Backspace, затем нажмите "Удалить ссылку"
- Создайте проект (он потерпит неудачу, но дождитесь его завершения)
- Вставьте файл заново, перетащив его из искателя в то же место, в котором вы его только что удалили
- Построить проект (должен работать сейчас)
Чистое восстановление не было в моем случае, поэтому я объясняю, как я решил проблему:
- Удалена ссылка на файл (не удалять файл)
- Добавить файл в проект снова и запустить
Шаг 1. Перейдите: Проект> Настройки сборки> Пути поиска
Шаг 2. Установите "Всегда искать пути пользователя" на Да
Шаг 3. Постройте проект (вы получите предупреждение, но проект будет построен.)
Шаг 4. Установите для параметра "Всегда искать пути пользователя" значение "Нет" и повторите сборку, чтобы исключить предупреждение.