opencv 3.0 Visual Studio Community 2017 编译链接错误

Posted

技术标签:

【中文标题】opencv 3.0 Visual Studio Community 2017 编译链接错误【英文标题】:opencv 3.0 visual studio community 2017 compilation LINK errors 【发布时间】:2017-07-27 20:30:05 【问题描述】:

我在 windows10 64 位中安装了 opencv 3.0。我在 Visual Studio 社区 2017 中创建了一个 C++ 项目,并执行了 opencv 文档中提供的所有这些步骤(this link 中的本地方法是: 1-创建环境变量:

OPENCV_DIR C:\Program Files\opencv\build\x86\vc11

我在用户和系统路径中添加如下

%OPENCV_DIR%\bin

2- 在我的项目中,我添加了 Properties -> C/C++ -> additional include repositories

C:\Program Files\opencv\build\include

3- 属性 -> 链接 -> 常规

$(OPENCV_DIR)\lib
$(OPENCV_DIR)\staticlib

我包含了staticlib,因为一开始编译器没有找到opencv_core300d.lib,而这个存在于staticlib中,所以我添加了它。

勾选YES以获得使用库依赖项

4- 属性 -> 链接 -> 条目

opencv_core300d.lib
opencv_highgui300d.lib
opencv_imgproc300d.lib
opencv_ml300d.lib
opencv_ts300d.lib

具有继承值:

kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib

我收到了更多 800 个错误,这些错误都与 opencv_core300d.lib 相关的 .obj 文件中的值不匹配有关:

    1>Source.cpp
1>opencv_core300d.lib(alloc.obj) : error LNK2038: discordance détectée pour '_MSC_VER' : la valeur '1700' ne correspond pas à la valeur '1900' in Source.obj
1>opencv_core300d.lib(alloc.obj) : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MTd_StaticDebug' ne correspond pas à la valeur 'MDd_DynamicDebug' in Source.obj
1>opencv_core300d.lib(stl.obj) : error LNK2038: discordance détectée pour '_MSC_VER' : la valeur '1700' ne correspond pas à la valeur '1900' in Source.obj
1>opencv_core300d.lib(stl.obj) : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MTd_StaticDebug' ne correspond pas à la valeur 'MDd_DynamicDebug' in Source.obj
1>opencv_core300d.lib(matrix.obj) : error LNK2038: discordance détectée pour '_MSC_VER' : la valeur '1700' ne correspond pas à la valeur '1900' in Source.obj
1>opencv_core300d.lib(matrix.obj) : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MTd_StaticDebug' ne correspond pas à la valeur 'MDd_DynamicDebug' in Source.obj
1>opencv_core300d.lib(opencv_core_pch.obj) : error LNK2038: discordance détectée pour '_MSC_VER' : la valeur '1700' ne correspond pas à la valeur '1900' in Source.obj
1>opencv_core300d.lib(opencv_core_pch.obj) : error LNK2038: discordance détectée pour 'RuntimeLibrary' : la valeur 'MTd_StaticDebug' ne correspond pas à la valeur 'MDd_DynamicDebug' in Source.obj
1>opencv_core300d.lib(system.obj) : error LNK2038: discordance détectée pour '_MSC_VER' : la valeur '1700' ne correspond pas à la valeur '1900' in Source.obj

我试图通过检查类似错误的类似答案来解决这个问题,根据this answer,这是由于编译器版本不同。如果有,如何改正?

用于测试 opencv 工作的示例代码:

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

using namespace cv;
using namespace std;

int main(int argc, char** argv)

    if (argc != 2)
    
        cout << " Usage: display_image ImageToLoadAndDisplay" << endl;
        return -1;
    

    Mat image;
    image = imread(argv[1], IMREAD_COLOR); // Read the file

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

    namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display.
    imshow("Display window", image); // Show our image inside it.

    waitKey(0); // Wait for a keystroke in the window
    return 0;

我需要帮助! 谢谢。

【问题讨论】:

opencv 是用 Visual Studio 2017 还是至少 2015 年构建的?这是为调试配置。 opencv_core300d.lib 不适用于发布版本。 自去年 12 月以来 3.2 已经可用,为什么还要 3.0?您是否构建了自己的副本? 2015 年的软件包不太可能使用几个月前的编译器构建。 您正在尝试在wikipedia 中链接使用不同版本的编译器编译的库(至少这是_MSC_VER 的错误),您可以看到使用的版本...在您的案例一个是使用 Visual Studio 2013 编译器编译的,另一个是使用 2015 编译的。另一个错误是您正在使用不同的标志(静态调试与动态调试)编译它,请查看 this 以获得解决方案 la valeur '1700' ne 对应 pas à la valeur '1900' 这意味着您正在混合编译器版本。我看不懂这种语言,但我仍然可以通过英文错误消息理解相同的错误。 我可以从文件名中看到 opencv-3.2 二进制文件支持您的编译器。 vc14 与 Visual Studio 2015 和 2017 兼容。 【参考方案1】:

这些错误是由于 opencv 库的构建版本不同。如果可用,您可以下载编译器版本的预构建二进制文件,否则您需要使用 cmake 从源代码构建 OpenCV。在您的情况下,您需要为 vs2017 构建的二进制文件,即 _MSC_VER 1900。

【讨论】:

我想回到 Visual Studio 社区 2015 以避免任何未来的问题(我认为可能 2017 太新所以可能存在一些问题)但没有找到任何下载链接。 我想回到 Visual Studio 社区 2015 以避免将来出现任何问题这也不能解决问题。 VS 2015 和 VS 2017 彼此二进制兼容,但与任何其他版本的 Visual Studio 不兼容。

以上是关于opencv 3.0 Visual Studio Community 2017 编译链接错误的主要内容,如果未能解决你的问题,请参考以下文章

Setup QT 5.5.1 + OpenCv 3.0 + Visual Studio 2013 on windows 10

网络摄像头流使用 OpenCV 3.0 + Visual Studio 2013 进行镜像

Visual Studio 安装OpenCV问题总结

Visual Studio 2019 16.1 使用 .NET Core 3.0

使用 Cmake 为 Visual Studio 2015 构建 OpenCV 3.0.0 的 DLL

如何在 Visual Studio 2013 中使用 NuGet 3.0?