#独家
C++通过cmake调用opencv出现undefined reference to xxx错误(win11)?

2023-08-06 0 1,504

代码非常简单,就一个cpp文件,但是里面涉及opencv的cv::Mat/cv::imread/cv::imshow/cv::waitKey在用cmake构建时全部报错。
将涉及cv的部分注释掉,只保留一个std::cout<<“hello world!”<<std::endl;的话是可以正常构建,运行的,也就是说,cmake和c++本身没问题。

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>

int main(void)
{
    std::cout<<"hello world!"<<std::endl;
    cv::Mat img1 = cv::imread("wallhaven-105871.jpg",cv::IMREAD_COLOR);
    cv::imshow("img1", img1);
    cv::waitKey(0);
    return 0;
}

build时具体的报错信息为:

[build] [ 50%] Linking CXX executable hello.exe
[build] D:/keypro/mingw64posix/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\hello.dir/objects.a(helloworld.cpp.obj): in function `main':
[build] D:/WORK/opencvproj/helloworld.cpp:9: undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
[build] D:/keypro/mingw64posix/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/WORK/opencvproj/helloworld.cpp:10: undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
[build] D:/keypro/mingw64posix/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/WORK/opencvproj/helloworld.cpp:11: undefined reference to `cv::waitKey(int)'
[build] D:/keypro/mingw64posix/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/WORK/opencvproj/helloworld.cpp:13: undefined reference to `cv::Mat::~Mat()'
[build] D:/keypro/mingw64posix/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/WORK/opencvproj/helloworld.cpp:13: undefined reference to `cv::Mat::~Mat()'

以下为CMakeLists.txt:

cmake_minimum_required(VERSION 3.19)

project(hello)

set(OpenCV_DIR "D:/WORK/opencv/build/x64/vc16/lib")
find_package(OpenCV REQUIRED CONFIG) # 此处的find_package是可以正常找到opencv的
include_directories(${OpenCV_INCLUDE_DIRS})

# dll lib文件所在目录均被加入链接路径
link_directories( D:/WORK/opencv/build/x64/vc16/lib)
link_directories( D:/WORK/opencv/build/x64/vc16/bin)

add_executable(hello helloworld.cpp)

# opencv库里所有lib dll文件都链接了
target_link_libraries(${PROJECT_NAME} opencv_world470 opencv_world470d opencv_world470.dll opencv_world470d.dll)

完全没有头绪…望大佬解答!

cmake_minimum_required(VERSION 3.19)

project(hello)

set(OpenCV_DIR "D:/WORK/opencv/build")
find_package(OpenCV REQUIRED) # 此处的find_package是可以正常找到opencv的

add_executable(hello helloworld.cpp)

# opencv库里所有lib dll文件都链接了
target_link_libraries(hello ${OpenCV_LIBS})
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 C++通过cmake调用opencv出现undefined reference to xxx错误(win11)? https://www.jkxiazai.com/2412.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务