使用CMake链接OpenCV库仍出现undefined reference报错如何解决?
问题根因
- 你当前使用Cygwin GCC编译器编译代码,但链接的是
vc15版本的OpenCV预编译库。vc15是微软Visual Studio 2017对应的编译链,和GCC的ABI、目标文件格式完全不兼容,就算库被CMake找到也无法完成链接,这是出现undefined reference报错的核心原因。 - 你日志里的
OpenCV_LIBS输出所有库名连在一起,说明本地的OpenCV配置脚本读取路径也存在异常,本质也是库版本和编译器不匹配导致的。
解决方案
可任选以下其中一种方案解决:
方案1:切换CLion编译链为Visual Studio(操作成本最低)
- 打开CLion设置,找到
Build, Execution, Deployment -> Toolchains - 添加Visual Studio编译链,选择本地已安装的VS2017及以上版本(需提前安装VS并勾选C++开发组件)
- 将该编译链设为默认,清理原有CMake缓存后重新编译即可,原有
vc15版本的OpenCV库可直接正常使用。
方案2:使用适配Cygwin的OpenCV版本
- 打开Cygwin的包管理器,搜索并安装预编译的
libopencv、libopencv-devel相关包 - 修改CMakeLists.txt里的
find_package语句,删除指定的PATHS参数,让CMake自动搜索Cygwin环境下的OpenCV库 - 清理CMake缓存后重新编译即可。
方案3:使用MinGW编译链+对应OpenCV版本
- 下载对应MinGW版本的OpenCV预编译包,或者自行用MinGW编译OpenCV源码
- 在CLion中切换编译链为MinGW,修改CMakeLists.txt中
find_package的PATHS路径为MinGW版本OpenCV的库路径 - 清理缓存后重新编译即可。
内容的提问来源于stack exchange,提问作者Badi
相关产品推荐
相关产品推荐

