在旧版macOS上用Clang编译时,如何禁用libc++可用性检查?
解决macOS旧版本编译std::filesystem的可用性错误
你遇到的是Clang的API可用性检查机制导致的错误——即使你链接了支持std::filesystem的自定义libc++,编译器仍会根据目标系统版本(MACOSX_DEPLOYMENT_TARGET)限制API使用。以下是具体解决选项:
精准抑制错误警告
如果只是要屏蔽std::filesystem相关的可用性错误,添加以下编译选项:
-Wno-unguarded-availability-new:关闭“未受保护的新API使用”警告(如果你的编译配置把警告转为错误,需要用-Wno-error=unguarded-availability-new)
完全禁用可用性检查(不推荐,除非必要)
如果需要彻底跳过所有API版本检查,添加:
-fno-availability-check
配合自定义libc++的完整编译示例
确保编译器正确使用你的自定义libc++库,完整编译命令大概是:
clang++ -std=c++17 -stdlib=libc++ -I/path/to/your/libc++/include -L/path/to/your/libc++/lib -static-libc++ -Wno-unguarded-availability-new -mmacosx-version-min=10.13 your_code.cpp -o output
其中:
-mmacosx-version-min=10.13指定目标系统版本(对应你的10.13/10.14)-static-libc++强制静态链接自定义libc++,避免系统动态库干扰
内容的提问来源于stack exchange,提问作者Bri Bri
相关产品推荐
相关产品推荐

