MacOS下使用clang++调用to_chars函数失败求助
解决MacOS 13.3下clang++编译
std::to_chars(double版本)报错的问题 问题重现
环境:
- MacOS 13.3
- Apple clang version 15.0.0 (clang-1500.0.28.1.1)
测试代码:
#include <charconv> using namespace std; char buf[30] = {0}; int main() { const auto to_result = to_chars(buf, buf+30, 32.3, chars_format::scientific, 5); return 1; }
编译命令及错误信息:
clang++ test.cpp -std=c++17
test.cpp:7:26: error: 'to_chars' is unavailable: introduced in macOS 13.3 const auto to_result = to_chars(buf, buf+30, 32.3, chars_format::scientific, 5); ^ /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include/c++/v1/charconv:815:17: note: 'to_chars' has been explicitly marked unavailable here to_chars_result to_chars(char* __first, char* __last, double __value, chars_format __fmt, int __precision); ^
解决方案
编译时添加-mmacosx-version-min=13.3参数,指定程序的最低部署目标为MacOS 13.3:
clang++ test.cpp -std=c++17 -mmacosx-version-min=13.3
原因说明
Apple的libc++库会根据MACOSX_DEPLOYMENT_TARGET控制API可用性。即使当前系统是13.3,编译器默认的部署目标可能低于13.3(比如13.0或更早版本),此时编译器会判定目标系统不支持MacOS 13.3才引入的std::to_chars(double类型重载),因此触发不可用错误。
通过-mmacosx-version-min=13.3明确指定部署目标后,编译器会启用对应版本的API,即可正常编译。
可以通过以下命令查看编译器默认的部署目标:
clang++ -v
输出中类似Target: arm64-apple-macosx13.0.0的行,末尾的版本号就是默认部署目标。
内容的提问来源于stack exchange,提问作者Adam Bujak
相关产品推荐
相关产品推荐

