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

Clion中C项目引入OpenCV编译报错core.hpp需C++编译的解决方法

解决Clion中CMake配置OpenCV时core.hpp header must be compiled as C++报错的问题

问题原因

OpenCV的核心头文件(如core.hpp)基于C编写,你的项目在CMake中声明为纯C语言项目(project(C006 C)),直接在C文件中包含OpenCV的C头文件会触发编译检查错误。VS中通过/TP选项强制将C文件按C++编译解决该问题,Clion中可通过CMake配置实现相同效果。

解决方案

方案1:仅对用到OpenCV的C文件强制按C++编译

如果不想修改整个项目的语言类型,可针对包含OpenCV头文件的源文件单独设置编译选项,在你的CMakeLists.txt中添加以下代码:

# 对指定C文件设置编译选项,强制按C++编译
set_source_files_properties(main.c HFile/suijisu.c PROPERTIES COMPILE_FLAGS "-x c++")

该命令通过GCC/MinGW的-x c++选项,指定将main.c和suijisu.c当作C++代码编译,等效于VS的/TP参数。

方案2:将整个项目改为C++项目

如果项目代码可兼容C语法,直接修改CMake中的项目语言声明,将纯C项目转为C项目:
修改CMakeLists.txt的开头及标准设置部分:

cmake_minimum_required(VERSION 3.26)
# 将项目语言从C改为CXX(C++)
project(C006 CXX)

set(OpenCV_DIR D:\\ProgrammingLanguage\\openCV\\OpenCVMinGWBuild)

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

# 设置C++标准版本,可根据需求调整
set(CMAKE_CXX_STANDARD 17)

add_executable(C006 main.c
        HFile/suijisu.c
        HFile/suijisu.h)

target_link_libraries(C006 ${OpenCV_LIBS})

修改后,CMake会将所有源文件按C规则编译,自然兼容OpenCV的C头文件。

注意事项

  • 使用方案1时,需确保被设置为C编译的C文件代码符合C语法规范(比如隐式类型转换、函数重载等细节差异),避免出现新的编译错误。
  • 若使用MinGW编译,需确保OpenCV构建版本与MinGW版本匹配,否则可能出现链接错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:31:09