c++ - 在 windows10 VS Code 上使用 CMake 对 imread 的 opencv 未定义引用
问题描述
我想用 CMake 在 VS Code IDE 上运行 OpenCV,但它显示undefined reference to cv::imread()
. 我尝试了几种方法(例如编辑 PATH 变量...)来解决问题,但是它仍然可以链接到 opencv 库。
这是我的
CMakelists.txt
# cmake needs this line cmake_minimum_required(VERSION 2.8) # Enable C++11 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) # Define project name project(cvtest) # Find OpenCV, you may need to set OpenCV_DIR variable # to the absolute path to the directory containing OpenCVConfig.cmake file # via the command line or GUI find_package(OpenCV REQUIRED) set(OpenCV_INCLUDE_DIRS "C:/opencv/build/include") include_directories(${OpenCV_INCLUDE_DIRS}) # If the package has been found, several variables will # be set, you can find the full list with descriptions # in the OpenCVConfig.cmake file. # Print some message showing some of them message(STATUS "OpenCV library status:") message(STATUS " version: ${OpenCV_VERSION}") message(STATUS " libraries: ${OpenCV_LIBS}") message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}") # Declare the executable target built from your sources add_executable(cvtest cvtest.cpp) # Link your application with OpenCV libraries target_link_libraries(cvtest ${OpenCV_LIBS})
完成 CMake 设置后,我运行
$ cmake -G "MinGW Makefiles"
.-- OpenCV library status: -- version: 2.4.13.6 -- libraries: opencv_videostab;opencv_video;opencv_ts;opencv_superres;opencv_stitching;opencv_photo;opencv_ocl;opencv_objdetect;opencv_nonfree;opencv_ml;opencv_legacy;opencv_imgproc;opencv_highgui;opencv_gpu;opencv_flann;opencv_features2d;opencv_core;opencv_contrib;opencv_calib3d -- include path: C:/opencv/build/include
最后,我运行
$ mingw32-make
了,但出现了一些错误Scanning dependencies of target cvtest [ 50%] Building CXX object CMakeFiles/cvtest.dir/cvtest.cpp.obj [100%] Linking CXX executable cvtest.exe CMakeFiles\cvtest.dir/objects.a(cvtest.cpp.obj):cvtest.cpp:(.text+0x63): undefined reference to cv::imread(std::string const&, int)' CMakeFiles\cvtest.dir/objects.a(cvtest.cpp.obj):cvtest.cpp:(.text+0x87): undefined reference to cv::_InputArray::_InputArray(cv::Mat const&)' CMakeFiles\cvtest.dir/objects.a(cvtest.cpp.obj):cvtest.cpp:(.text+0xc1): undefined reference to cv::imshow(std::string const&, cv::_InputArray const&)' c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: CMakeFiles\cvtest.dir/objects.a(cvtest.cpp.obj): bad reloc address 0xf in section `.text$_ZN2cv3MatD1Ev[__ZN2cv3MatD1Ev]' c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation collect2.exe: error: ld returned 1 exit status CMakeFiles\cvtest.dir\build.make:104: recipe for target 'cvtest.exe' failed mingw32-make[2]: *** [cvtest.exe] Error 1 CMakeFiles\Makefile2:71: recipe for target 'CMakeFiles/cvtest.dir/all' failed mingw32-make[1]: *** [CMakeFiles/cvtest.dir/all] Error 2 Makefile:82: recipe for target 'all' failed mingw32-make: *** [all] Error 2
这是
cvtest.cpp
#include <cstdio> #include <iostream> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main(int argc, char *argv[]) { Mat img = imread("lena.bmp", CV_LOAD_IMAGE_COLOR); imshow("lena", img); }
我是否误解了我应该知道的事情,我该如何纠正?谢谢 !
解决方案
推荐阅读
- tensorflow - 索引 = 2 不在 [0, 1) 中
- javascript - Angular 工厂定义打破了需求
- asp.net-mvc - 为 ADFS 身份验证跳过 Home Realm Discovery 页面
- jenkins - Tomcat 上的 Jenkins War 部署
- javascript - 如何从嵌套的 Javascript 数组中读取数据
- php - git避免在发生合并冲突时使用FTP上传文件
- excel - 工作簿表复制到多个工作簿并重命名
- netsuite - NetSuite:从 Suitecommerce 站点获取信息到用户事件脚本
- ios - 在另一个 View Xcode 中显示 ViewController
- c# - PDFClown 无法编辑创建的 PDF