简体   繁体   English

OpenCV 未定义引用 `cv::imread(cv::String const&, int)'

[英]OpenCV undefined reference to `cv::imread(cv::String const&, int)'

I cannot get opencv working in C++ code.我无法让 opencv 在 C++ 代码中工作。 I've read all the similar question, but not have gotten my code to compile.我已经阅读了所有类似的问题,但还没有编译我的代码。

I installed OpenCV from source and included the -D OPENCV_GENERATE_PKGCONFIG=ON option and I'm trying to get a simple OpenCV example to work.我从源代码安装了 OpenCV 并包含 -D OPENCV_GENERATE_PKGCONFIG=ON 选项,我试图让一个简单的 OpenCV 示例工作。

Here's the code:这是代码:

    #include <opencv2/core.hpp>
    #include <opencv2/imgcodecs.hpp>
    #include <opencv2/highgui.hpp>
    #include <iostream>
    using namespace cv;
    int main()
    {
        std::string image_path = "/data/000001.jpg";
        Mat img = imread(image_path, IMREAD_COLOR);
        if(img.empty())
        {
            std::cout << "Could not read the image: " << image_path << std::endl;
            return 1;
        }
        imshow("Display window", img);
        int k = waitKey(0); // Wait for a keystroke in the window
        if(k == 's')
        {
            imwrite("starry_night.png", img);
        }
        return 0;
    }

Trying to compile with: $/usr/bin/g++ -g pkg-config --cflags --libs opencv main.cpp causes 'undefined reference' error for all OpenCV calls: /code/cpp/play/main.cpp:9: undefined reference to `cv::imread(cv::String const&, int)'尝试编译: $/usr/bin/g++ -g pkg-config --cflags --libs opencv main.cpp 导致所有 OpenCV 调用的“未定义引用”错误:/code/cpp/play/main.cpp:9 : 对 `cv::imread(cv::String const&, int)' 的未定义引用

Running pkg-config --cflags --libs opencv returns:运行 pkg-config --cflags --libs opencv 返回:

pkg-config --cflags --libs opencv -I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_stitching -vlopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_viz -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_imgproc -lopencv_core pkg-config --cflags --libs opencv -I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_stitching -vlopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_c -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_viz -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_flann -lopencv_xphoto -lopencv_imgproc -lopencv_core

I also tried to build the code with cmake using this file:我还尝试使用此文件使用 cmake 构建代码:

    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)

Is this what OpenCV_LIB is supposed to look like?这就是 OpenCV_LIB 应该看起来的样子吗? Is there supposed to be a path?应该有路吗?

-- OpenCV_INCLUDE_DIRS = /usr/include;/usr/include/opencv
-- OpenCV_LIBS = opencv_calib3d;opencv_core;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_viz;opencv_aruco;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_datasets;opencv_dpm;opencv_face;opencv_freetype;opencv_fuzzy;opencv_hdf;opencv_line_descriptor;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_reg;opencv_rgbd;opencv_saliency;opencv_stereo;opencv_structured_light;opencv_surface_matching;opencv_text;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto
-- Configuring done

Thanks for the help.谢谢您的帮助。

Thanks for the suggestions.感谢您的建议。 john was right.约翰是对的。 This solved it:这解决了它:

g++ -g main.cpp `pkg-config --libs opencv`

pkg-config needed to be after the source files. pkg-config 需要在源文件之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:对`cv::imread(std::string const&amp;, int)&#39;的未定义引用 - error: undefined reference to `cv::imread(std::string const&, int)' 未定义的参考cv :: imread(std :: string const&,int) - undefined reference cv::imread(std::string const&, int) OpenCV:对`cv :: namedWindow(cv :: String const&,int)&#39;的未定义引用 - OpenCV: undefined reference to `cv::namedWindow(cv::String const&, int)' 未定义引用`cv :: error(int,std :: string const&,char const *,char const *,int)&#39; - undefined reference to `cv::error(int, std::string const&, char const*, char const*, int)' OpenCV:使用cmake时对`cv :: imread的未定义引用 - OpenCV: undefined reference to `cv::imread when using cmake OpenCV“对&#39;cv :: imread&#39;等的未定义引用C ++ - OpenCV "Undefined reference to 'cv::imread' etc C++ 未定义对&#39;std :: string Helper :: ToString的引用 <int> (int const&)&#39; - undefined reference to 'std::string Helper::ToString<int>(int const&)' ndk-build 给我“错误:未定义的引用”到 cv::CascadeClassifier::load(std::string const&amp;) 即使在我链接库之后 - ndk-build giving me "error: undefined reference" to cv::CascadeClassifier::load(std::string const&) even after I link the libraries OpenCV:对cv :: imwrite的未定义引用 - OpenCV: undefined reference to cv::imwrite 错误:未定义对`vector的引用 <int> :: pushBack(int const&)&#39; - error: undefined reference to `vector<int>::pushBack(int const&)'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM