You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:33:15