Як виправити помилку PCH?


132

Коли я намагаюся вбудувати свою програму Xcode, я отримую це повідомлення про помилку:

Файл PCH, побудований з іншої гілки ((clang-425.0.24)), ніж компілятор ((clang-425.0.27))

Це не відбулося раніше, але це була перша збірка після оновлення Xcode.

Інші програми працюють, але не ця конкретна.

Якщо я відключу "Precompile Prefix Header"налаштування, воно працює.

Як я можу виправити цю помилку і продовжувати зберігати це налаштування?

Відповіді:


246

Це часто проблема кешування. Зазвичай це можна вирішити, утримуючи клавішу Option і вибираючи Product> Clean Build Folder ...


3
Це не виправило помилки для мене. Я також виконую повне очищення та видалення отриманих даних.
Ben S

6
Працював для мене, за винятком того, що це було під Product> Cleanі немає потреби в командному ключі. (Xcode 4.6.1)
Стів Хейлі

1
@SteveHaley Є Product > Clean, але це робить менш ретельну роботу. Деякі люди можуть придбати за допомогою Product > Clean, для більшості Product > Clean Build Folder...це достатньо, а іншим потрібне видалення вручну, як зазначено у відповіді @Sedes нижче.
gaige

7
Я знаю його старе питання, але вищезгадане виправлення мені не допомогло. Просто видаливши отримані дані та побудувавши проект знову працювати добре.
Анкіт Джайн

2
ви можете просто зробити rm -rf / ios / build?
SuperUberDuper

47

Видаліть DerivedDataпапку для проекту. Подивіться у розділі Налаштування Xcode -> Locations, щоб побачити, де ви їх збережете.


Важливо зазначити, що DerivedDataне обов’язково там, де знаходиться ваша Buildпапка, це мені дуже допомогло, дякую!
Ніт

1
видалити moduleCacheвсередині DerivedDataтеж
whtlnv

Спочатку слід спробувати "очистити" так, як говорять інші відповіді. Коли це не працює, я просто просто рекурсивно видаляю всю DerivedDataпапку ... "ядро з орбіти ... єдиний спосіб бути впевненим". @whitelionV це також Rm moduleCacheта все інше там.
wcochran

39

Здається, що продукт> Очистити папку збірки ... (із натиснутою клавішею Option) працює для більшості людей. Дивіться вибрану відповідь від @gaige.

Якщо ви не схожі на більшість людей (включаючи мене), і це все ще спричиняє проблеми, XCode, ймовірно, залишив ваші спільні попередньо складені заголовки в іншому місці. Для мене вони були в папці, подібній до цієї:

/var/folders/<some random two characters>/<some random string>/C/com.apple.Xcode.502/SharedPrecompiledHeaders

Я просто видалив всю папку SharedPrecompiledHeaders, і це вирішило для мене речі. Я б не хотів чіпати тут ще багато чого ...


2
Це вирішило для мене цю проблему. Для мене це тому, що у мене побудований командний рядок.
ThomasW

2
Якщо це ваш випадок, ви можете знайти цю папку в стенограмі збірки Xcode. Я шукав рядок "SharedPrecompiledHeaders"
Жозе Мануель Санчес

6
Так, це правильне рішення. Особливо, якщо ви створюєте з командного рядка або у вас є сценарій збірки. Попередньо складене розташування заголовка можна знайти в налаштуваннях збірки, "Збудувати місця" -> Заздалегідь кешований заголовок попередньо складених заголовків.
Карим

Як знайти каталог var?
GoldenJoe

1
@GoldenJoe Open Finder, Shift-Cmd-Gі тип/var
Sedes

23

Перейдіть у розділ Налаштування Xcode-> Locations (як зазначено у відповіді wcochran) та просто перейменуйте папку DerivedData. Я просто змінив шахту з "DerivedData" на "DerivedData2", і це змусило систему припинити посилання на старе місце розташування. Це вирішило для мене, коли жодна з інших відповідей не спрацювала. Див. Малюнок:

введіть тут опис зображення


15

Жоден з інших варіантів для мене не працював, ось що це виправило:

Я видалив папку кеша в /Users/(Yourname)/Library/Developer/Xcode/DerivedData/ModuleCache/(перейменування також працює).

Спробуйте видалити папку, згадану в помилці, якщо ваша помилка виглядає приблизно так:

PCH was compiled with module cache path '/Users/User/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8', but the path is currently '/Users/Stan/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8


Так, ти маєш рацію. Жоден із перерахованих вище для мене не працює. Просто видаліть папку, про яку вона згадувала, і перебудуйте, ось і все.
Чжан Базз

Це правильна відповідь. Очистити / видалити DerivedData не працює для мене після переміщення проекту на інший шлях.
Білл Чан


13

У своєму каталозі проектів ios перейдіть до створення та видалення папки ModuleCache . Запустити react-native run-iosзнову, він повинен працювати, як очікувалося. Підсумок -rm -rf ios/build/ModuleCache


Так, також на натисканні реакцій та побудові робіт з Xcode, але не з CLI, використовуючи npm run ios. Видалення кешу, як було запропоновано, вирішило проблему.
дакт

6

Після оновлення Xcode я отримував це з кількома проектами. Clean Build Folder і Clean не мали ефекту - відповідь @sedes і коментар @ josema.vitaminew зробили це для мене. Але це може бути складним, якщо ви не використовуєте трохи хитрості, тому ось крок за кроком ярлик:

  1. перейти до журналу збірки, який не вдався
  2. використовуйте cmd-f "SharedPrecompiledHeaders", щоб знайти його (це буде посеред масивного жахливого складного командного рядка)
  3. перетягніть і виберіть текст "SharedPrecompiledHeaders" та всі символи ПЕРЕД, але НЕ ПІСЛЯ його, поки ви не доберетеся до початку цього біта шляху (все ще в середині великого блоку тексту), наприклад для мене: "/ var / folders / 03 /n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders
  4. відкрити Finder
  5. меню: Перейти -> Перейти до папки ...
  6. скопіюйте / вставте вибраний шлях
  7. у "SharedPrecompiledHeaders" видаліть ВСІ підпапки (це безпечно: це лише кешовані дані)

... і тепер усі ваші проекти будуть "виправлені", але доведеться спочатку будувати себе з нульовим кешуванням (тому НАСТУПНЕ збирання ТІЛЬКИ буде повільніше, ніж зазвичай).


5

в моєму випадку я позбувся всіх файлів під SharedPrecompiledHeaders таким чином, і все почало працювати нормально:

sudo find /var/folders/ -type d -name "SharedPrecompiledHeaders" | xargs -n 1 -I dir sudo find dir -name \* -type f -delete

Це те, що я можу легко використовувати в сценарії, тому мені це подобається ... Я не виявив жодних поганих випадків [поки]
Метт

5

Я зіткнувся з цією помилкою під час спроби створити проект із Swift Package Manager.

Рішення - просто видалити .buildкаталог.


4

Особливо, якщо ви будуєте з командного рядка або у вас є сценарій збірки, очищення цілі xcode недостатньо. Ви видалили цю папку.

Попередньо складене місце заголовка можна знайти в

Target -> build settings => "Build locations" -> Precompiled headers cached path

Видаліть цю папку за допомогою,

#rm -fr SharedPrecompiledHeaders

введіть тут опис зображення


Мій шлях до кешу знаходився в папці build / build / ModuleCache /. Видалити його зі старого місця не вийшло з хитрості
TheJeff

3

Якщо це не вирішено чисткою. Це проблема кеш-збирання - утримуйте клавішу Option і перейдіть до продукту> Очистити папку збірки. Це вирішило мою проблему.


3

У моєму випадку Xcode створював папку DerivedData в основному пакеті мого проекту (/ Users / Path_to_your_project_source_code / YourProjectName / DerivedData)

Я тільки що видалив цю папку зі свого вихідного коду і тепер вона працює.

Щоб встановити прапорець, перейдіть до Налаштування Xcode-> Місцеположення та перевірте, чи вибрано DerivedData на "Відносні". Дивіться малюнок нижче введіть тут опис зображення


3

Для мене це буде завжди, коли я копіюю свій проект в інше місце. Я б зробив це, щоб підштовхнути його до репо або чогось іншого.

Мені потрібно видалити папку Build (rm -rf Build /) у старих та нових місцях, щоб вона працювала. Це має сенс, оскільки в папці Build будуть дані, які не стосуються нового місця розташування.

Очищення отриманих даних або видалення папок sharedPrecompiledHeaders насправді цього не робили.



2

Очищення та / або видалення отриманих даних для мене не працювало. Що стосується роботи - це торкнутись / зберегти файл .pch (додати символ, а потім видалити), щоб змусити його перебудувати. Це зробило трюк.


Це працювало для мене. Я видалив каталог SharedPrecompiledHeaders, очистити збірку, очистити папку збірки тощо. Це було на Xcode 5.1
migs647

Де файл PCH?
TheJeff

2

Якщо зробити чисту збірку вам не допоможе, знайдіть файли PCH /var/folders/../SharedPrecompiledHeadersта видаліть файли PCH, які працювали для мене.


2
Є відповідь, ідентичний цьому з більш детальною деталлю вище, опублікованою @sedes Спробуйте не публікувати повторювані відповіді.
michaellindahl

2

Ви можете спробувати очистити продукт або папку збірки:

SHIFT+ COMMAND+K

OPTION+ SHIFT+ COMMAND+K


2

Якщо ви робите збірку командного рядка через xcodebuild, то подивіться, чи є-derivedDataPath BUILD_DIR параметр. Якщо так, ваш каталог ModuleCache.noindex буде знаходитися в BUILD_DIR замість звичайного місця розташування Xcode. Видаліть каталог ModuleCache.noindex і все буде налаштовано.

Я зіткнувся з цією ситуацією, тому що я будую додаток React Native, а клієнт iOS, як правило, будується з командного рядка через набір інструментів React Native.


1

Я спробував очистити проект та очистити папку збірки, яка не працювала.

Після цього я повністю вийшов з xCode, видалив отриману папку даних у стандартному розташуванні: ~ / Library / Developer / Xcode / DerivedData, запустив xCode ще раз і створив проект.

Це, здавалося, вирішило проблему для мене.


Не могли б ви трохи уточнити, будь ласка?
Річард Даллі

Закриття Xcode, запуск rm -rf ~/Library/Developer/Xcode/DerivedDataу Terminal, а потім відкриття Xcode зробив це для мене. Я також переконався, що мої розташування (Xcode -> Preferences -> Locations) були за замовчуванням.
sman591

1

ОНОВЛЕНО

Це прекрасно працювало для мене:

  • Закрийте проект чи робочу область.
  • У Finder: ⇧shift + ⌘cmd + G
  • Вставити: ~ / Бібліотека / Розробник / Xcode / DerivedData /
  • Видаліть папку ModuleCache та видаліть сміття.
  • Відкрийте свій проект.
  • Чистота: ⇧shift + ⌘cmd + K
  • Побудова: ⌘cmd + B

Тут
посилання на xCode 7.3.1


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.