【问题标题】:learning openCV, Getting LNK2019 (unresolved external symbol)学习openCV,获取LNK2019(未解析的外部符号)
【发布时间】:2020-06-28 10:37:26
【问题描述】:

我目前开始尝试学习 openCV 和 Visual Studio 2017 以用于工作项目。 我目前正在学习 openCV 的一些教程,但是我收到了 8 个 LNK2019 错误。 你们能帮我解决这个问题吗?

总的来说,我对编码很陌生,如果我问任何愚蠢的问题,请提前抱歉。

这是我当前的代码:

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

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
    String imageName( "HappyFish.jpg" ); //by default
    if (argc > 1)
    {
        imageName = argv[1];
    }
    Mat image;

    image = imread(samples::findFile(imageName), IMREAD_COLOR); //Read the file

    if (image.empty()) //checking for valid input
    {
        cout << "Could not open or find the image" << std::endl;
        return -1;
    }

    namedWindow("Display window", WINDOW_AUTOSIZE); //create a window for the display
    imshow("Display window", image); //showing our image inside the window
    waitKey(0); //Wait for a keystroke in the window
    return 0;
}

这些是我的错误:

严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“void __cdecl 函数中引用的 cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ) 打开 cv 测试 C:\Users\BRR\source\repos\Open cv test\Open cv test\Open cv test.obj 1

严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“void __cdecl cv::error(int,class std::basic_string,class std::allocator > const &,char const *,char const *,int)" (?error@cv@@YAXHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PBD1H@Z) 在函数“public:class cv::Mat & __thiscall”中引用 cv::Mat::operator=(类 cv::Mat &&)" (??4Mat@cv@@QAEAAV01@$$QAV01@@Z) 打开简历 测试 C:\Users\BRR\source\repos\Open cv test\Open cv test\Open cv test.obj 1

严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“public: void __thiscall” cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ) 函数“公共:void __thiscall cv::Mat::release(void)” (?release@Mat@cv@@QAEXXZ) 打开 cv 测试 C:\Users\BRR\source\repos\Open cv 测试\打开 cv 测试\打开 cv test.obj 1

严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“类 std::basic_string,类 std::allocator > __cdecl cv::samples::findFile(class std::basic_string,类 std::allocator > const &,bool,bool)" (?findFile@samples@cv@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV34@_N1@Z) 在函数 _main Open cv 中引用 测试 C:\Users\BRR\source\repos\Open cv test\Open cv test\Open cv test.obj 1

严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“class cv::Mat __cdecl cv::imread(类 std::basic_string,类 std::allocator > const &,int)" (?imread@cv@@YA?AVMat@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 在函数 _main Open cv 中引用 测试 C:\Users\BRR\source\repos\Open cv test\Open cv test\Open cv test.obj 1

严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“void __cdecl cv::namedWindow(类 std::basic_string,类 std::allocator > const &,int)" (?namedWindow@cv@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 在函数 _main Open cv 中引用 测试 C:\Users\BRR\source\repos\Open cv test\Open cv test\Open cv test.obj 1

严重性代码描述项目文件行抑制状态 错误 LNK2019 无法解析的外部符号“int __cdecl 函数中引用的 cv::waitKey(int)" (?waitKey@cv@@YAHH@Z) _main 打开 cv test C:\Users\BRR\source\repos\Open cv test\Open cv test\Open cv test.obj 1

严重性代码描述项目文件行抑制状态 错误 LNK2019 未解析的外部符号“void __cdecl cv::imshow(class std::basic_string,class std::allocator > const &,class cv::debug_build_guard::_InputArray const &)" (?imshow@cv@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV_InputArray@debug_build_guard@1@@Z) 在函数 _main Open cv 中引用 测试 C:\Users\BRR\source\repos\Open cv test\Open cv test\Open cv test.obj 1

提前致谢

【问题讨论】:

    标签: c++ opencv visual-studio-2017


    【解决方案1】:

    对我来说,这个问题通常是由于链接器没有指向正确的 lib 文件造成的。这一步完成,首先你需要将VS指向包含lib文件的文件夹,然后你需要说出你想要的lib文件。

    首先。 项目 > 属性。然后配置属性 > C/C++ > 常规。在字段 Additional Include Directories 中将地址位置添加到 OpenCv lib 文件夹。我的看起来像这样。

    OpenCV_3_3_0\build\VC17\lib\Debug

    OpenCV_3_3_0\build\VC17\lib\Release

    现在我们需要说明我们想要哪些库。所以在 VS 项目属性选项卡中, 转到配置属性 > 链接器 > 输入,然后转到附加依赖项字段。

    您现在需要添加所需库的名称。 opencv_calib3d330.lib 就是一个例子

    所有库都在文件夹中,所以只需继续添加所有库,直到错误消失(取决于您使用的功能取决于您需要的库)

    如果您没有正确构建 VS17 的库,则需要按照这些说明进行操作。

    https://docs.opencv.org/2.4/doc/tutorials/introduction/windows_install/windows_install.html#windows-installation

    【讨论】:

    • 有没有地方可以找到这些库的列表?您在答案末尾指的是什么文件夹?
    • 嘿 Bartrae,我不能指向该文件夹,因为它取决于您自己的路径名。但它是你的opencv构建部分的lib文件夹。如果您显示您的 opencv 构建的文件夹结构,我可以提供进一步的帮助。至于列表,文件夹包含所有文件,所以就是列表,继续添加文件直到没有更多错误(不是一个很好的答案,但文件会根据您使用的功能而变化)
    • 我在回答中添加了一张图片
    • 如果我理解正确,你的意思是像这样的路径“C:\lib\Build\opencv\lib”对吗?在那里我有两个文件夹,“Debug”和“Release” .这些文件夹中有三个 .lib 文件。
    • 是的,那些文件夹,您需要添加两个不同的地址,具体取决于您的构建是 Debug 还是 Release。只有三个?它们是什么?
    【解决方案2】:

    您似乎没有包含必要的依赖项: 你应该关注:https://docs.opencv.org/2.4/doc/tutorials/introduction/windows_visual_studio_Opencv/windows_visual_studio_Opencv.html

    那里有详细的解释。搜索:“Additional Dependencies”,但您可能应该重新评估您为设置项目所做的其他步骤。

    【讨论】:

    • 谢谢,我会看看这个,然后会回复你。
    • 我查看了指南,有些东西有点不同,因为它们似乎使用了不同的 Visual Studio 版本。但是,当我需要在 Project >Properties>Linker>Input 中添加大量 .lib 文件时,我似乎遇到了问题。看来我在 lib 文件夹中只有 3 个 .lib 文件(请参阅与 Chris 的讨论)
    • 好的,所以你使用的是更新版本:但你也可以找到一个教程:medium.com/@subwaymatch/opencv-410-with-vs-2019-3d0bc0c81d96 只需添加 opencv_world。但它是一样的,唯一的变化是库被分组到一个二进制文件中
    • 您是否建议按照您链接的指南完全重新安装 OpenCV,而不是试图挽救我所拥有的?同样,如果我问愚蠢的问题,我对此很抱歉。
    • 这取决于你 :) 这可能是可以挽救的,但我通常会从头开始。
    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 2014-11-07
    • 2013-06-01
    • 1970-01-01
    • 2023-03-28
    • 2022-01-06
    • 2014-09-19
    • 2012-12-17
    相关资源
    最近更新 更多