【问题标题】:How to fix 'undefined reference' error opencv and g++如何修复“未定义的引用”错误opencv和g ++
【发布时间】:2020-02-03 01:39:32
【问题描述】:

我正在尝试在 VSCode 中构建使用 OpenCV 的简单程序,已经阅读了堆栈上的数千篇文章,它们都是在 linux 上制作的(我尝试在 windows 上做)这是我的代码

这是我尝试使用的:

"args": [
                "-g",
                "-I",
                "C:\\OpenCV\\opencv\\build\\include",
                "${file}",
                "-L",
                "C:\\OpenCV\\opencv\\build\\x64\\vc15\\lib",
                "-l",
                "opencv_world345",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],

我检查了几次路径

#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }
    Mat image;
    image = imread( argv[1], 1 );
    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}

这就是我得到的结果

执行任务:C:\MinGW\bin\g++.exe -IC:\OpenCV\opencv\build\include >d:\programowanie\Projekt\Project\main.cpp -L >C:\OpenCV\opencv\ build\x64\vc15\lib -l opencv_world345 -o >d:\programowanie\Projekt\Project\main.exe

c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx \AppData\Local\Temp\ccXtHNOY.o:main.cpp:(.text+0x72):undefined reference to cv::imread(cv::String const&, int)' c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx\AppData\Local\Temp\ccXtHNOY.o:main.cpp:(.text+0xe3): undefined reference tocv::namedWindow(cv::String const&, int)' c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx\AppData\ Local\Temp\ccXtHNOY.o:main.cpp:(.text+0x129): >undefined reference to cv::imshow(cv::String const&, cv::_InputArray const&)' c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx\AppData\Local\Temp\ccXtHNOY.o:main.cpp:(.text+0x149): >undefined reference tocv::waitKey(int)' c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx\AppData\ Local\Temp\ccXtHNOY.o:main.cpp:(.text$_ZN2cv6StringC1EPKc[__ZN2cv6StringC1EPKc]+0x42): 未定义引用cv::String::allocate(unsigned int)' c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx\AppData\Local\Temp\ccXtHNOY.o:main.cpp:(.text$_ZN2cv6StringD1Ev[__ZN2cv6StringD1Ev]+0xf): undefined reference tocv::String::deallocate()' c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx\AppData\ Local\Temp\ccXtHNOY.o:main.cpp:(.text$ZN2cv6StringaSERKS0[__ZN2cv6StringaSERKS0_]+0x1c):未定义引用 cv::String::deallocate()' c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx\AppData\Local\Temp\ccXtHNOY.o:main.cpp:(.text$_ZN2cv3MatD1Ev[__ZN2cv3MatD1Ev]+0x2d): undefined reference tocv::fastFree(void*)'
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx\AppData\ Local\Temp\ccXtHNOY.o:main.cpp:(.text$_ZN2cv3Mat7releaseEv[__ZN2cv3Mat7releaseEv]+0x40): 未定义引用cv::Mat::deallocate()' c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: >C:\Users\xxx\AppData\Local\Temp\ccXtHNOY.o:main.cpp:(.text$_ZN2cv3MataSEOS0_[__ZN2cv3MataSEOS0_]+0xb4): undefined reference tocv::fastFree(void*)' collect2.exe:错误:ld 返回 1 个退出状态

我失去了理智,希望有人知道发生了什么

【问题讨论】:

  • "C:\\OpenCV\\opencv\\build\\x64\\vc15\\lib", 对 gcc/mingw 没有好处。这些是 Visual Studio 二进制文件。
  • 嗯,这可能是问题的根源,我怎样才能获得有效的库?我不擅长 lib 的东西 :(
  • 快速谷歌搜索显示此链接看起来很有希望:https://github.com/huihut/OpenCV-MinGW-Build

标签: c++ windows opencv g++ mingw


【解决方案1】:

问题是您正在为 mingw 使用 Visual Studio 二进制文件。如果库是 c 库,这可能有效,但不适用于 opencv。以下站点有用于 mingw 的非官方 opencv 二进制文件:https://github.com/huihut/OpenCV-MinGW-Build

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    相关资源
    最近更新 更多