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

使用Ninja编译Aseprite时出现头文件冲突编译错误求助

解决Windows下Ninja编译Aseprite时libarchive的MinGW/MSVC头文件冲突问题

核心原因

编译环境的包含路径同时混入了MinGW和MSVC的头文件,导致time_t这类类型重定义、语法解析冲突,触发大量编译错误。

具体解决步骤

  • 清理编译缓存
    删除Aseprite项目根目录下的build文件夹,彻底清除残留的旧配置和编译产物:

    rmdir /s /q build
    mkdir build
    cd build
    
  • 使用纯MSVC命令行环境
    打开对应版本的Visual Studio开发者命令提示符(比如Visual Studio 2022 Developer Command Prompt),在该环境下重新生成Ninja编译配置,确保全程使用MSVC的编译器和头文件:

    cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLAF_BACKEND=skia -DSKIA_DIR=<你的skia路径> -DSKIA_LIBRARY_DIR=<skia库路径> -DSKIA_LIBRARY=<skia.lib路径> ..
    

    注意:不要在MinGW终端或混合环境下执行此命令,必须保证环境变量中没有MinGW相关的INCLUDE/LIB路径。

  • 强制优先使用项目自带头文件
    找到third_party/libarchive对应的CMake配置块,添加规则强制使用组件自身的头文件,避免系统混入的MinGW头文件干扰:

    include_directories(NO_SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libarchive/include)
    

    或者在生成CMake配置时,通过参数指定仅包含MSVC和项目自身的头文件路径:

    cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLAF_BACKEND=skia -DSKIA_DIR=<你的skia路径> -DCMAKE_INCLUDE_PATH="C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\<你的MSVC版本号>\include" ..
    
  • 临时清理冲突环境变量
    如果系统环境变量中存在MinGW的INCLUDE或LIB条目,临时清空后再编译:

    set INCLUDE=
    set LIB=
    ninja
    

验证编译

完成上述操作后,在VS开发者命令提示符中执行ninja,观察third_party/libarchive组件的编译过程,确认头文件冲突错误是否消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:32:07