it-swarm.com.ru

Ошибка компоновщика 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)

Кто-нибудь знает в чем дело?

65
tbodt

Кража ответа @ Мартина-Баулига:

Попробуйте полную перестройку/очистку. Возможно, что предыдущая сборка была ненормально прервана, из-за чего файл TWRAppDelegate.o поврежден или имеет нулевой размер.

135
Peter K.

Я обычно добавляю пробел (может быть любой символ в этом отношении) к рассматриваемому файлу, удаляю его и затем сохраняю ..... Проще и быстрее, чем чистая сборка.

9
grassyburrito

rm -rf /Users/hostname/Library/Developer/Xcode/DerivedData

3
yeyimilk

просто удалите этот файл, запустив cmd в вашем терминальном приложении:

rm /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o

2
haithngn

Вы можете просто удалить файл TWRAppDelegate.o и продолжить сборку. Скопируйте полный путь, указанный в сообщении об ошибке, и вставьте его за командой «rm» в вашем терминале. Нет необходимости чистить/перестраивать, удалять производные данные, добавлять/удалять файл из проекта и т.д.

1
Jason Pepas

Чтобы автоматически решить эту проблему, можно добавить Build Script Phase. Перейти к Xcode -> Ваш проект -> Ваша цель -> Этапы сборки -> + -> Этап запуска нового скрипта

Переименуйте его в Xcode Link Fix и переместите его выше фазы Compile Sources. Вставьте это в тело скрипта:

# Legacy build system
dirname "$LD_DEPENDENCY_INFO_FILE" | xargs -I {} find {} -size 0 | while read -d $'\n' file; do
    rm "$file"
done

# New build system
find "$OBJECT_FILE_DIR_normal" -size 0 | while read -d $'\n' file; do
    rm "$file"
done

Этот скрипт проверяет наличие объектных файлов с нулевым размером и удаляет их, поэтому, когда компиляция будет выполнена на следующем этапе, она будет успешной.

Вам нужно добавить этот скрипт для каждой цели приложения, если у вас их много.

Этот скрипт занимает ~ 0,1 секунды для запуска и спасает вас от полной перестройки проекта.

1
Anton Plebanovich

Поскольку создание чистого проекта может занять слишком много времени, для тех, у кого есть доступ к файлу, поврежденному в кеше, существует более короткий путь:

  • Удалить файл (Удалить ссылку)
  • Построить проект
  • Вставить файл
  • Построить проект

Полная версия, поэтому у вас нет проблем с поиском файла:

  • Найдите файл в навигаторе проекта Xcode
  • Щелкните правой кнопкой мыши файл и нажмите «Показать в Finder» (открывает Finder в том месте, где находится файл)
  • Выберите файл в Xcode и нажмите клавишу Backspace, затем нажмите «Удалить ссылку»
  • Создайте проект (он потерпит неудачу, но дождитесь его завершения)
  • Заново вставьте файл, перетащив его из Finder в то же место, в котором вы его только что удалили
  • Построить проект (должен работать сейчас)
1
Matic Oblak

Быстрый способ исправить ошибку без полной очистки кэша:

  1. Открыть файл, описанный по ошибке (в случае этого вопроса TWRAppDelegate)
  2. cmd + A
  3. cmd + X
  4. Перестроить - не удалось
  5. cmd + V
  6. Перестроить - успешно
0
Vadim Akhmerov

Чистое восстановление не было в моем случае, поэтому я объясняю, как я решил проблему:
- Удалена ссылка на файл (не удаляйте файл)
- Добавить файл в проект снова и запустить

0
David Santiago

Шаг 1. Перейдите: Проект> Настройки сборки> Пути поиска

Шаг 2. Установите для «Всегда искать пути пользователя» значение Да

Шаг 3. Постройте проект (вы получите предупреждение, но проект будет построен.)

Шаг 4. Установите для параметра «Всегда искать пути пользователя» значение «Нет» и повторите сборку, чтобы исключить предупреждение.

0
tland