使用 Visual Studio 项目使 Opencv 可移植并消除链接错误

Posted

技术标签:

【中文标题】使用 Visual Studio 项目使 Opencv 可移植并消除链接错误【英文标题】:Make Opencv portable with visual studio project and remove linkage errors 【发布时间】:2017-04-13 14:25:23 【问题描述】:

我正在尝试将 opencv 2.4.13 链接到 Visual Studio 项目。我在项目的子文件夹中有 .lib 和 .dll 文件。我将相对路径添加到配置中。但我仍然遇到链接错误。 我的目标是使项目可移植:我将目录带到另一台机器上,无需在机器上单独安装 opencv 即可运行。

我添加了什么:

lib 子目录到其他库目录 附加包含目录的包含目录 链接器中的 .dll -> 输入 -> 附加依赖项

以下是这些错误的示例:

LNK2019 unresolved external symbol __wcsdup_dbg referenced in function __Getctype   
LNK2001 unresolved external symbol __wcsdup_dbg 
LNK2019 unresolved external symbol __realloc_dbg referenced in function "private: static void __cdecl std::locale::_Locimp::_Locimp_Addfac(class std::locale::_Locimp *,class std::locale::facet *,unsigned int)" (?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z)

有什么想法吗?

【问题讨论】:

【参考方案1】:

确保您的所有库都使用相同的调试配置构建 - 也就是说,如果您正在构建项目的 DEBUG 版本,则需要将其链接到 DEBUG 库,并且如果您正在构建 RELEASE 版本您的项目,您需要将其与 RELEASE 库链接。

同样,您需要确保构建选项中的其他所有内容都兼容 - 例如如果库是在启用 /MT 的情况下构建的,您还必须在启用 /MT 的情况下构建应用程序。与调用约定(/Gd、/Gr、/Gz)、32 位或 64 位等相同。

您收到的链接器错误引用 _dbg 符号,这似乎暗示您在某处存在 DEBUG/RELEASE 不一致。

【讨论】:

谢谢你,似乎解决了链接错误。但是现在我有一个运行时错误,告诉我它无法找到 *.dll 文件。你知道原因吗? 将 dll 文件的位置添加到您的系统路径中。 但这不会违背将所有文件包含在项目文件夹中的目的。这是否意味着如果我将项目带到另一台计算机上,我将不得不将 dll 文件添加到系统 PATH 中?【参考方案2】:

我终于用这个问题的答案弄明白了: Question: OpenCV - missing dlls?

我刚刚将我的dll的路径添加到调试环境:项目->属性->配置属性->调试->环境->在这里添加dll的路径,语法如下:

例如,将 C:\Windows\Temp 添加到 PATH:PATH=C:\WINDOWS\Temp;%PATH% 同样,将 $(SolutionDir)\DLLS 附加到 PATH:PATH=%PATH%;$(SolutionDir)\DLLS

【讨论】:

以上是关于使用 Visual Studio 项目使 Opencv 可移植并消除链接错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使Visual Studio在项目中包括所有排除的文件

Visual Studio 2005,如何获得解决方案中使用项目的位置?

用户控件总是使 Visual Studio 崩溃

如何使 Visual Studio 架构比较忽略数据库引用

使 Visual Studio 不关心 DLL 版本

Visual Studio C++:在另一个项目中使用一个项目生成的静态库