【问题标题】:dll Dependency unwanted with visual studio 2010Visual Studio 2010 不需要的 dll 依赖关系
【发布时间】:2012-09-11 11:07:13
【问题描述】:

我正在使用 Visual Studio 2010。 在开始我的项目之前,我安装了 cuda SDK 4.2。 之后,我安装了opencv 2.4.2。在我的项目中,我只使用 opencv 并且它工作正常。但是,当我尝试在另一台计算机上运行我的程序时,它告诉我需要 cuda dll(如 cudart32_42_9.dll、npp32_42_9.dll 和 nvcuda.dll)。我根本不使用 cuda,也没有在我的项目属性中引用 cuda。我想知道如何删除这些依赖。我不明白为什么visual studio会添加我不使用的dll。

【问题讨论】:

  • 您可能正在使用 GPU 版本的 OpenCV 库文件。在另一台计算机上,检查 lib 文件的路径。确保它没有指向 OpenCV 目录中的 gpu 文件夹。
  • @sgar91 我用依赖walker检查了opencv dll依赖,我想我用cuda构建了opencv。所以即使我不使用 cuda,opencv dll 也有依赖关系。我想我别无选择,只能将 cuda dll 与程序一起提供。另一台电脑上,没有安装opencv,我给opencv dll带程序。
  • 与其自己构建opencv,不如从sourceforge下载预构建的OpenCV。它包含二进制文件的 cuda 和非 cuda 版本。只需将非cuda版本的dll复制到另一台计算机即可。
  • @sgar91 实际上,它有效。我只需要从 common 文件夹中添加 tbb.dll,但最大的优势是现在无法运行 cuda 的计算机现在可以运行我的程序了。

标签: visual-studio-2010 opencv linker cuda


【解决方案1】:

预构建的 OpenCV 2.2 及更高版本,带有 2 个版本的二进制文件 (dll)。

\build\gpu 目录中的 dll 是超集,构建时支持 CUDA。因此,要使用它们,您需要 CUDA 运行时 dll(cudart、npp 等)。如果您想使用 OpenCV 的 GPU 功能,则需要这些二进制文件。这些也可用于检查您的系统中是否存在 GPU。

OpenCV build 目录中 x86 或 x64 文件夹中的其他版本的 dll 是在不支持 CUDA 的情况下构建的(尽管该目录中也存在 gpu dll)。您不需要 cuda dll 来使用这些二进制文件。

这两个版本都支持英特尔线程构建模块,因此分别需要 tbb_debug.dll 和 tbb.dll 进行调试和发布配置。所以如果你使用 OpenCV 的 CPU 功能,它们将是 TBB Accelerated。

【讨论】:

  • 你知道是否有办法知道 openCV 使用 Cuda 中的哪个函数?我猜 Cuda 构建比非 Cuda 快得多。
  • GPU 功能仅在 OpenCV 的 C++ 接口中可用。命名空间 cv::gpu 内的所有函数都是 gpu 加速的,并且使用 CUDA。首先,您必须在必须使用它们的源文件中#include gpu.hpp。
  • CUDA 构建没有必要更快。这取决于系统中存在的硬件。例如,如果您将 Tesla C2070 与 Core 2 Duo 进行比较,这将是不公平的比较。但是,如果您将 C2070 与 Core i7 2600K 进行比较,您真的可以说 gpu 很快:p。
  • 我没有使用 cv::gpu,只使用了 cv::core、improc、highgui 和 video,但那些 dll 需要 cuda dll。所以我认为他们使用了 cuda。
  • @sgar91:我猜你混淆了处理器名称:Core i7 2600K 有 ~60 GFlops,与只有 ~20 GFlops 的 Core 2 Duo 相比,它更适合与 Tesla 进行比较。两者在简单算术运算上都比 Tesla C2070 (~1 TFlop) 慢得多,但在算法中有很多条件时会更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2012-02-21
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
相关资源
最近更新 更多