使用 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 可移植并消除链接错误的主要内容,如果未能解决你的问题,请参考以下文章