MacOS clang через Homebrew не работает в Mojave `wchar.h`

Неудивительно, что новое обновление OSX Mojave сломало мою установку llvm в Homebrew, вот шаги, которые я пробовал:

xcode-select --install # Complained, so I installed commandLineTools from here https://developer.apple.com/download/more/
xcode-select -p /Library/Developer/CommandLineTools
xcode-select --install # Now says installed
sudo xcodebuild -license # Fails, as it says I only have CommandLineTools installed in /Library/Developer/CommandLineTools not xcode

# Try something else (all versions)
brew uninstall --force llvm
brew install llvm # yay v7 how exciting

# Only it still don't work
clang++ -std=c++17 foo.cpp -o f
In file included from foo.cpp:1:
In file included from /usr/local/Cellar/llvm/7.0.0/include/c++/v1/iostream:38:
In file included from /usr/local/Cellar/llvm/7.0.0/include/c++/v1/ios:215:
In file included from /usr/local/Cellar/llvm/7.0.0/include/c++/v1/iosfwd:90:
/usr/local/Cellar/llvm/7.0.0/include/c++/v1/wchar.h:119:15: fatal error: 'wchar.h' file not found
#include_next <wchar.h>
              ^~~~~~~~~
1 error generated.

Любые идеи? Первую половину того, что я пробовал, я нашел в Интернете, но в основном для старых обновлений MacOS, возможно, Mojave сломал все новым и непредсказуемым образом.


person rausted    schedule 01.11.2018    source источник
comment
Хотя вопрос является дубликатом, ответ НЕ является дубликатом и единственным, который работает.   -  person rausted    schedule 12.07.2019
comment
Последняя часть здесь arsbrevis.de помогла мне   -  person Alaleh Ahmadian    schedule 19.12.2020
comment
См. файл wchar.h не найден   -  person puio    schedule 16.01.2021


Ответы (3)


Вот как я это решил (очень грязно, но работал долгое время):

  1. Отключенный SIP на моем Mac
  2. Символическая ссылка /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include на /usr/include, как ожидается в средах POSIX.
  3. Снова включил SIP.

Теперь я должен сделать заметку, чтобы повторять это каждый раз, когда выходит новое обновление OSX. Это ничего не сломало в отношении Xcode, clang (от brew) и т. д., поэтому я сохраню его. Имейте в виду, однако, это может сломать ваши вещи.

person rausted    schedule 01.11.2018
comment
Это сработало для меня, но мне это действительно не нравится. Я должен перезагружаться в режиме восстановления и запускать скрипт каждый раз, когда я обновляюсь сейчас. Режим восстановления действительно неприятный. Перетаскивание тремя пальцами отключено. Чувствительность мыши немного ниже. Повтор клавиш отключен. Многие инструменты командной строки, похоже, не указаны в моем PATH, поэтому мне пришлось использовать абсолютный путь для доступа к микро (преемнику нано). - person Indiana Kernick; 05.05.2019

Это известная проблема последних macos. Попробуйте установить эту переменную среды, это должно решить эту проблему.

export LIBCLANG_SYSTEM_INCLUDE_DIR="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include"
person S.M.    schedule 01.11.2018
comment
Известно где? Потому что я искал решение со вчерашнего дня. Кроме того, почему отрицательные голоса вообще не интуитивно понятны! - person rausted; 01.11.2018
comment
Я получил это решение от моего колледжа. Наша компания запрещает обновлять macOS до Mojave из-за проблем с SDK и clang на этом macos. - person S.M.; 01.11.2018
comment
Я вижу, к сожалению, у меня это тоже не сработало, я все еще получаю ту же ошибку, несмотря на то, что помещаю envvar в свой bash_profile. - person rausted; 01.11.2018

Я сделал что-то глупое, но это решило проблему... Хотя не уверен, что это сработает на вашем компьютере.

Вот что я сделал: изначально я установил c++ с помощью Homebrew на свой MacBook в Mojave... поэтому мне пришлось вручную установить Xcode CommandLineTools с помощью установщика, найденного по адресу /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg. Затем я скопировал содержимое папки "c++" из папки /Library/Developer/CommandLineTools/usr/include/c++/v1 в папку, где я хочу, чтобы отсутствующий файл находился в /usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0 , заменив файлы с теми же именами.

Уловка сработала, так как теперь отсутствующий файл "wchar.h" находится именно там, где он должен быть... Я мог бы сделать симлинк, задним числом. Ваше здоровье!

person Kris Stern    schedule 18.12.2018