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

在Embarcadero C++ Builder 10.3编译OpenCV遇Ninja错误求助

在Embarcadero C++ Builder 10.3中构建OpenCV 3.4.16时libtiff编译报错的解决方法

问题背景

我需要在Embarcadero C++ Builder 10.3(32位经典编译器)中使用OpenCV 3.4.16,按照官方文档通过CMake 3.19.4和Ninja 1.11.1进行构建。完成CMake配置与文件生成后,执行ninja命令构建到约70/1345任务时失败,编译libtiff的tif_color.c、tif_aux.c等文件时出现以下错误:

C:\Program Files (x86)\Embarcadero\Studio\20.0\include\dinkumware64\xkeycheck.h:44:5: error: keyword defined before including C standard header
   #error keyword defined before including C standard header
    ^

使用环境

  • CMake 3.19.4
  • Ninja 1.11.1
  • Embarcadero C++ Builder 10.3(32位经典编译器)
  • OpenCV 3.4.16

解决方法

方法1:为libtiff添加C标准编译参数

这个错误源于Embarcadero编译器处理C代码时,预定义宏与标准C头文件的检查逻辑冲突。给libtiff强制启用C标准模式即可解决:

  1. 打开OpenCV源码目录下的3rdparty/libtiff/CMakeLists.txt
  2. 在add_library(tiff ...)代码块之前添加以下CMake配置:
    if(CMAKE_C_COMPILER_ID MATCHES "Embarcadero")
        target_compile_options(tiff PRIVATE -A)
    endif()
    
    -A参数会让编译器严格遵循C标准,避免预定义宏干扰头文件检查。
  3. 清理之前的构建目录,重新运行CMake配置,再执行ninja构建。

方法2:禁用TIFF模块(按需选择)

如果不需要OpenCV处理TIFF格式图片的功能,可以直接跳过libtiff的编译:
在CMake配置界面(或命令行)取消勾选WITH_TIFF选项,重新生成构建文件后执行ninja即可。

方法3:修正编译器头文件路径

错误中出现了dinkumware64目录,说明可能误加载了64位的头文件。在CMake配置时手动指定32位编译器的头文件路径:
在CMake命令行添加参数:

-DCMAKE_C_INCLUDE_PATH="C:\Program Files (x86)\Embarcadero\Studio\20.0\include"

确保CMake使用32位的标准头文件,而非64位版本。

内容的提问来源于stack exchange,提问作者Xander-Vreeswijk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:05:29