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
相关产品推荐
相关产品推荐

