MacOS 10.15下预编译clang编译CPP报错:wchar.h文件未找到
解决MacOS 10.15下自定义clang++编译找不到wchar.h的问题
我来帮你搞定这个编译报错的问题!你遇到的核心原因是:手动安装的预编译clang包在查找系统底层头文件(比如wchar.h)时,不知道MacOS系统SDK的位置,而#include_next <wchar.h>正是要去系统SDK里找这个文件,不是你安装的clang包自带的版本。
快速解决方案
你只需要在编译时指定系统SDK的路径,并明确目标系统架构即可:
- 先获取你的系统SDK路径,执行以下命令:
xcrun --show-sdk-path
它会输出类似这样的路径:/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
- 用带参数的命令编译你的程序:
clang++ -isysroot $(xcrun --show-sdk-path) -target x86_64-apple-macos10.15 hello.cpp -o hello
永久配置(避免每次输入参数)
如果不想每次编译都加这么长的参数,可以把配置加到你的shell配置文件里(比如~/.zshrc或者~/.bashrc):
# 针对自定义clang的编译参数配置 export CXXFLAGS="-isysroot $(xcrun --show-sdk-path) -target x86_64-apple-macos10.15"
保存后重新加载配置(source ~/.zshrc),之后直接用clang++ hello.cpp -o hello就能正常编译了。
为什么之前的-I参数没用?
你添加的-I只是告诉clang去查找libc++的头文件,但#include_next <wchar.h>的作用是跳过当前目录里的头文件,去系统默认的位置找底层的系统头文件。而自定义安装的clang默认不知道MacOS系统SDK的位置,所以必须用-isysroot明确指定,它才能找到wchar.h这类系统级头文件。
内容的提问来源于stack exchange,提问作者jdhao
相关产品推荐
相关产品推荐

