c++ - MacOS clang 通过 Homebrew 在 Mojave `wchar.h` 下损坏

标签 c++ macos clang llvm macos-mojave

<分区>

毫不奇怪,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 以一种新的且不可预测的方式破坏了事物。

最佳答案

我是这样解决的(很脏但是已经用了很长时间):

  1. 在我的 Mac 上禁用 SIP
  2. 符号链接(symbolic link) /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/usr/include 正如在 POSIX 环境中所预期的那样。
  3. 重新启用 SIP。

现在,每次新的 OSX 更新发布时,我都必须记下要重新执行此操作。这并没有破坏 Xcode、clang(来自 brew)等任何东西,所以我会保留它。不过请注意,这可能会损坏您的东西。

关于c++ - MacOS clang 通过 Homebrew 在 Mojave `wchar.h` 下损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55093867/

相关文章:

c++ - 插入 std::map 时的位置

macos - 如何在 OS X 64 位上为 i386 构建 Boost?

c++ - 如何使用 Qt SDK 为 Gentoo 64 位(Linux 内核 2.6)构建 native 应用程序?

c++ - 从远程主机编译 C++ 11 代码的问题

c++ - 使用模板和可变参数模板进行线程初始化

swift - 如何在 OS X 上的文本字段上使用 DidEndEditing (swift)

c++ - Xcode 编译时 CLion 不编译?

c++ - 函数参数中的 `type_alias<char[N]>{}` VS `char[N]{}`

c++ - 如何使用 clang 和 distcc 在不同架构的从机上编译(例如 Mac/Linux)

c++ - xcode 7 如何抑制警告 "overrides a member function but is not marked ' override'”