【问题标题】:Two different opencv_world builds两个不同的 opencv_world 构建
【发布时间】:2020-11-24 10:58:39
【问题描述】:

我有 2 个用于 MS Visual Studio 的 OpenCV 4.3 版本。第一个是来自 GitHub 的预构建版本,第二个是我使用 CUDA 支持构建的版本。他们自己工作没有问题。我已将两个构建的 /bin/ 文件夹添加到 PATH。问题是 both 构建都有名为 opencv_world430.lib 的 lib 文件,并且将此文件添加到 'Linker' -> 'Input' -> 'Additional Dependencies' 会导致链接器找不到我想要的 DLL但是 PATH 列表中 upper 文件夹中的 DLL。

我的意思是,当我使用 非 CUDA 构建 创建项目时(将 include 和 lib 目录正确添加到 VC++ 目录),与 CUDA 的 DLL 被链接 因为它的文件路径比我想要的位置高。

解决方案可能只是在我使用 PATH 时交换它们的位置,但我想问是否有更简单的方法来处理这个问题。

另外:我在 Windows 10 上使用 VS2019。

【问题讨论】:

  • 也许在项目文件中搜索并替换它的xml。确保在修改之前将其签入到版本控制中。
  • 对于 dll 路径问题,请编辑 windows PATH 环境变量中各项的顺序。
  • @drescherjm 我试过了,但是我必须编辑 PATH 变量的顺序,并在我想运行其他版本时重新启动 Visual Studio。由于一个版本支持 CUDA,它会大量加载 Nvidia Toolkit DLL,从而导致执行时间更长。我想将必要的 DLL 复制到解决方案文件夹可能是一个解决方案,但我想知道是否可以告诉程序在 Visual Studio 中查找 DLL 的位置。
  • 在 Visual Studio IDE 中,您可以为您拥有的每个项目独立地在调试设置上设置 PATH 环境变量。

标签: c++ visual-studio opencv dll path


【解决方案1】:

我建议您可以选择Properties->Build Event->Post-Build Event->Command Line 将dll 复制到Debug 文件夹。您可以参考以下example

copy $(TargetPath) $(TargetDir)..\..\someFolder\myoutput.dll
regasm $(TargetPath)

【讨论】:

  • 这行不通,因为 opencv_world.dll 在调用main() 之前是链接方式,所以我相信调用LoadLibraryExA() 为时已晚(关于@987654322 @ 关联)。看来我坚持将该 dll 复制到执行文件夹中。
  • 我修改了答案,。希望对你有帮助。
猜你喜欢
  • 2023-02-16
  • 2022-09-09
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
相关资源
最近更新 更多