由于未定义的引用,无法编译 OpenCV?

新手上路,请多包涵

代码很简单,基本上直接来自 教程。我正在运行 Arch Linux 并将 OpenCV 库存储在 /usr/include/ 。我还检查以确保 /usr/include 在我的 PATH 中。

 #include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>

using namespace cv;

int main(int argc, char** argv){
    Mat image;
    Mat grayImage;

    if(!argv[1]){
        std::cerr << "No image data!" << std::endl;
        return -1;
    }

    image = imread(argv[1], 1);
    cvtColor(image, grayImage, CV_BGR2GRAY);
    imwrite("Gray_Image.jpg", grayImage);

    namedWindow(argv[1], CV_WINDOW_AUTOSIZE);
    namedWindow("Gray Image", CV_WINDOW_AUTOSIZE);

    imshow(argv[1], image);
    imshow("Gray Image", grayImage);

    waitKey(0);
    return 0;
}

编译器进程成功找到并包含这些头文件,但在编译时我仍然得到未定义的引用错误。如果您查看我包含的头文件,它们会进一步包含 /usr/include/opencv2 中的其他文件。我已经检查过并且确实存在这样的头文件。

有任何想法吗?

 /tmp/ccudBcqD.o: In function `main':
test.cpp:(.text+0xc0): undefined reference to `cv::imread(std::string const&, int)'
test.cpp:(.text+0x11f): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)'
test.cpp:(.text+0x138): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
test.cpp:(.text+0x158): undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)'
test.cpp:(.text+0x180): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
test.cpp:(.text+0x1ca): undefined reference to `cv::imwrite(std::string const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)'
test.cpp:(.text+0x241): undefined reference to `cv::namedWindow(std::string const&, int)'
test.cpp:(.text+0x291): undefined reference to `cv::namedWindow(std::string const&, int)'
test.cpp:(.text+0x2bf): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
test.cpp:(.text+0x2ff): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
test.cpp:(.text+0x32d): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
test.cpp:(.text+0x361): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
test.cpp:(.text+0x383): undefined reference to `cv::waitKey(int)'
/tmp/ccudBcqD.o: In function `cv::Mat::~Mat()':
test.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to `cv::fastFree(void*)'
/tmp/ccudBcqD.o: In function `cv::Mat::operator=(cv::Mat const&)':
test.cpp:(.text._ZN2cv3MataSERKS0_[_ZN2cv3MataSERKS0_]+0x111): undefined reference to `cv::Mat::copySize(cv::Mat const&)'
/tmp/ccudBcqD.o: In function `cv::Mat::release()':
test.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x47): undefined reference to `cv::Mat::deallocate()'
collect2: error: ld returned 1 exit status
[Finished in 1.1s with exit code 1]
[shell_cmd: g++ "/home/branden/Desktop/OpenCV/test.cpp" -o "/home/branden/Desktop/OpenCV/test"]
[dir: /home/branden/Desktop/OpenCV]
[path: /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/vendor_perl:/usr/bin/core_perl]

原文由 sherrellbc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

这是一个链接器问题。尝试:

 g++ -o test_1 test_1.cpp `pkg-config opencv --cflags --libs`

这应该可以编译源代码。但是,如果您最近从源代码编译 OpenCV,您将在运行时遇到链接问题,将找不到该库。在大多数情况下,从源代码编译库后,您需要最后做:

 sudo ldconfig

原文由 Plamen Tetevensky 发布,翻译遵循 CC BY-SA 3.0 许可协议

我只是改变了参数的位置: g++ -o test2.out test2.cpp pkg-config opencv4 --cflags --libs

在我改变位置之前,我使用了 g++ pkg-config opencv4 --cflags --libs test2.cpp -o test2.out。

您可以尝试在终端中运行 pkg-config opencv –cflags –libs 或运行 pkg-config opencv4 –cflags –libs 以查看是否可以获得任何信息。

原文由 Lance 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题