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

OpenCV在C++中编译失败:undefined reference错误求助

解决OpenCV编译时的"undefined reference"错误

你遇到的核心问题是编译过程中没有正确链接OpenCV库,不管是直接使用g++还是CMake构建,都有对应的小细节需要修正,下面一步步来解决:

一、直接使用g++编译的问题

你的编译命令写法有误,pkg-config --cflags --libs opencv的输出需要通过命令替换传入g++,否则系统会把pkg-config当成要编译的源文件,导致库链接参数根本没生效。

正确的命令应该是:

/usr/bin/g++ -g main.cpp $(pkg-config --cflags --libs opencv) -o play
  • $(...)会执行括号里的命令,把输出作为参数传给g++
  • -o play指定生成的可执行文件名,方便后续运行

二、CMake构建的问题

你的CMakeLists.txt已经正确找到了OpenCV的头文件和库,但缺少将库链接到目标程序的关键步骤,导致编译时无法找到OpenCV函数的实现。

修改后的CMakeLists.txt需要添加target_link_libraries指令:

set(CMAKE_VERBOSE_MAKEFILE ON)
cmake_minimum_required(VERSION 3.16)
project(play)
set(CMAKE_CXX_STANDARD 14)

find_package(OpenCV REQUIRED)
message(STATUS "OpenCV_INCLUDE_DIRS = ${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV_LIBS = ${OpenCV_LIBS}")

add_executable(play main.cpp)
# 新增这一行:将OpenCV库链接到你的可执行程序
target_link_libraries(play ${OpenCV_LIBS})

执行cmake . && make重新构建,应该就能正常编译了。

关于OpenCV_LIBS的疑问

你看到的OpenCV_LIBS格式是完全正确的!find_package(OpenCV REQUIRED)已经自动处理了库的路径信息,这些库名会被CMake解析为对应的库文件路径,不需要手动添加-L或者路径前缀。

另外补充一点:从你的pkg-config输出看,你安装的OpenCV版本应该是3.x(因为库名是opencv_core而不是opencv4/core),如果后续升级到OpenCV4,pkg-config的参数会变成pkg-config --cflags --libs opencv4,不过当前版本下你的配置没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:53:12