MacOS clang 通过 Homebrew 在 Mojave `wchar.h` 下损坏
MacOS clang via Homebrew broken under Mojave `wchar.h`
毫无疑问,OSX Mojave 的新更新破坏了我在 Homebrew 中安装的 llvm,这些是我尝试过的步骤:
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 以一种新的、不可预测的方式破坏了东西。
这是最新 macos 的一个众所周知的问题。尝试设置这个环境变量,它必须解决这个问题。
export LIBCLANG_SYSTEM_INCLUDE_DIR="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include"
我是这样解决的(很脏但是用了很久):
- 在我的 Mac
上禁用 SIP
- 符号链接
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
到 /usr/include
正如在 POSIX 环境中预期的那样。
- 重新启用 SIP。
现在我必须记下每次新 OSX 更新出来时都要重新做这件事。这没有破坏 Xcode、clang(来自 brew)等任何东西,所以我会保留它。不过请注意,这可能会破坏您的东西。
我做了一些愚蠢的事情,但确实解决了问题...但不确定它是否适用于您的计算机。
这是我所做的:
我最初在 Mojave 上的 MacBook 上使用 Homebrew 安装了 c++...所以我不得不使用 /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
中的安装程序手动安装 Xcode CommandLineTools。然后,我将 "c++" 文件夹内容从文件夹 /Library/Developer/CommandLineTools/usr/include/c++/v1
复制到我希望丢失文件所在的文件夹,位于 /usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0
,同时替换具有相同名称的文件。
这个技巧奏效了,因为现在丢失的文件 "wchar.h" 就在它应该在的地方......事后看来,我本可以使用 simlink。干杯!
毫无疑问,OSX Mojave 的新更新破坏了我在 Homebrew 中安装的 llvm,这些是我尝试过的步骤:
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 以一种新的、不可预测的方式破坏了东西。
这是最新 macos 的一个众所周知的问题。尝试设置这个环境变量,它必须解决这个问题。
export LIBCLANG_SYSTEM_INCLUDE_DIR="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include"
我是这样解决的(很脏但是用了很久):
- 在我的 Mac 上禁用 SIP
- 符号链接
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
到/usr/include
正如在 POSIX 环境中预期的那样。 - 重新启用 SIP。
现在我必须记下每次新 OSX 更新出来时都要重新做这件事。这没有破坏 Xcode、clang(来自 brew)等任何东西,所以我会保留它。不过请注意,这可能会破坏您的东西。
我做了一些愚蠢的事情,但确实解决了问题...但不确定它是否适用于您的计算机。
这是我所做的:
我最初在 Mojave 上的 MacBook 上使用 Homebrew 安装了 c++...所以我不得不使用 /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
中的安装程序手动安装 Xcode CommandLineTools。然后,我将 "c++" 文件夹内容从文件夹 /Library/Developer/CommandLineTools/usr/include/c++/v1
复制到我希望丢失文件所在的文件夹,位于 /usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0
,同时替换具有相同名称的文件。
这个技巧奏效了,因为现在丢失的文件 "wchar.h" 就在它应该在的地方......事后看来,我本可以使用 simlink。干杯!