GCC-14编译C++20 chrono时区功能触发已删除函数错误
解决brew安装的GCC 14中C++20 chrono时区功能编译报错问题
问题原因
brew默认构建的GCC 14未启用libstdc的时区数据库支持。GCC的C20 chrono时区功能依赖IANA时区数据库,当编译GCC时未开启--enable-libstdcxx-timezone选项,相关接口(如get_tzdb)会被标记为deleted,同时std::chrono::time_zone_link的拷贝构造函数也会被禁用,最终导致编译报错。
解决方案
1. 重新编译安装带时区支持的GCC
先卸载现有版本:
brew uninstall gcc
然后从源码编译并启用时区支持:
brew install gcc --build-from-source --enable-libstdcxx-timezone
注:源码编译耗时较长,需确保已安装Xcode Command Line Tools,且有足够磁盘空间。
2. 简化编译命令
brew安装的GCC已配置好环境变量,无需手动指定include和lib路径,直接使用:
g++-14 -std=c++20 test.cpp -stdlib=libstdc++
手动指定路径可能导致链接到不完整的库文件,引发额外问题。
3. 验证功能
用以下测试代码验证时区功能是否正常:
#include <chrono> #include <iostream> int main() { const auto& tzdb = std::chrono::get_tzdb(); std::cout << "时区数据库版本:" << tzdb.version << std::endl; return 0; }
编译运行后若能正常输出版本号,说明问题已解决。
内容的提问来源于stack exchange,提问作者olafwx
相关产品推荐
相关产品推荐

