OpenCV4代码编译正常但链接失败:无法找到Mat和imshow相关定义
原因与解决方法
原因
你的链接命令仅链接了opencv_imgcodecs库,但代码中用到的函数分属多个OpenCV库:
cv::Mat、empty()属于opencv_core库imshow、waitKey属于opencv_highgui库imread属于opencv_imgcodecs库
仅链接单个库会导致其他依赖函数找不到定义;另外使用静态库(.a)链接时,必须显式指定所有依赖库,且顺序要符合依赖关系(被依赖的库放在后面)。
解决方法
方法1:手动指定所有依赖静态库
直接把需要的静态库都加入链接命令,若库不在默认路径需用-L指定库目录(示例路径为/usr/lib/x86_64-linux-gnu,请根据你的系统调整):
g++ showimage.o -L /usr/lib/x86_64-linux-gnu -l:libopencv_core.a -l:libopencv_imgcodecs.a -l:libopencv_highgui.a
方法2:使用pkg-config自动生成参数(推荐)
pkg-config可以自动获取OpenCV的编译和链接参数,避免手动指定库的麻烦:
# 编译+链接一步完成 g++ showimage.cpp -o showimage $(pkg-config --cflags --libs opencv4)
或者分两步执行:
# 编译生成.o文件 g++ showimage.cpp -c $(pkg-config --cflags opencv4) # 链接生成可执行文件 g++ showimage.o -o showimage $(pkg-config --libs opencv4)
内容的提问来源于stack exchange,提问作者rnso
相关产品推荐
相关产品推荐

