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

date::make_zoned()在Windows环境下崩溃的问题求助

Windows下使用独立date.h库调用date::make_zoned触发abort()的解决方法
  • 检查时区数据文件部署
    独立版date-tz库依赖IANA时区数据文件,Windows系统默认不包含这些数据。如果程序找不到时区数据,会直接触发abort():

    • 将tzdata文件(如tzdata.zi或完整的tzdata目录)放置在程序执行目录下;
    • 或者在代码中通过date::set_install指定数据路径:
      date::set_install("D:/your-app/tzdata");
      
  • 修正CMake链接配置
    确保CMake正确链接date::date-tz库,并处理时区数据的部署:

    • 若用FetchContent导入date库,需启用时区库编译选项:
      FetchContent_Declare(
        date
        GIT_REPOSITORY https://github.com/HowardHinnant/date.git
        GIT_TAG        v3.0.1 # 替换为你使用的版本
      )
      FetchContent_MakeAvailable(date)
      target_link_libraries(your-app PRIVATE date::date date::date-tz)
      
    • 手动集成时,要将date-tz.lib(或动态库)和时区数据文件一起打包到程序目录。
  • 强制使用独立版库,避免VS集成冲突
    VS2022自带C++20集成的chrono扩展,可能与独立date.h库冲突。通过定义宏强制使用独立版本:

    • 在CMake中添加编译定义:
      target_compile_definitions(your-app PRIVATE DATE_STANDALONE)
      
    • 或在代码头部添加:
      #define DATE_STANDALONE
      #include "date.h"
      
  • 验证时区ID有效性
    虽然date-tz库支持IANA时区ID(如"America/Chicago"),但Windows下可能存在映射问题。可以临时替换为Windows原生时区名称(如"Central Standard Time")测试,排查是否是时区ID解析失败导致崩溃。

  • 调试定位崩溃根源
    在VS2022中启动调试,触发abort()时查看调用栈和输出窗口的断言信息。比如断言tz != nullptr通常意味着时区数据加载失败,能直接指向问题原因。

内容的提问来源于stack exchange,提问作者shashashamti2008

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:25:06