Google 测试 - 找不到自己的 dll

问题描述 投票:0回答:2

所以我会在这个问题的开头说我是 C++ 中的库使用的新手(今天刚刚学会了如何导入 Dll),所以请耐心等待。 项目结构如下:

  • ComsDll(ComsDll.lib 和 ComsDll.dll) -> 在另一个项目中,但我可以编辑它,这是在可测试项目中使用的

  • Testable(Testable.lib 和 Testable.dll 以及 Testable.obj 作为输出)

  • 谷歌测试项目 -> 这两个都在同一个解决方案中。 Testable 还生成一个 Dll 并使用 ComsDll

现在,所有这些都正确构建,但我无法运行 GoogleTest 项目,因为我收到以下系统错误:

The code execution cannot proceed because ComsDll.dll was not found. Reinstalling the problem may fix this problem.

在 Google Tests 中使用 ComsDll.lib 作为输入文件后会发生这种情况,否则我会得到 Testable.h 中使用的函数的引用错误 在 ComsDll.lib 之上,Google Test 项目还导入了 Testable.lib、Testable.h 和 Testable.obj。

ComsDll.dll 文件位于两个项目的 OutputDir 中,旁边是显然找到的 ComsDll.lib 文件,所以我有点困惑,因为根据我的理解,.lib 引用了 .dll 中的数据,所以如何如果 .dll 在同一个文件夹中,映射在库包含目录中,项目会找不到吗?

我使用的是 Visual Studio 2017,所有项目都在 Release/x64 下编译,代码生成在所有 3 种情况下都设置为 MDd,所以这里应该没有冲突。

如果能在这里得到一些帮助真的很好,因为我在谷歌上能找到的所有内容要么是指标准库,要么是解决方案是“将 .dll 移动到可执行文件的目录”的情况,这是我的 OutputDir。 此外,如果有人有解决方案或想法,那么也能得到解释为什么你的解决方案有效/我的无效,这样我就可以从中学习:)

PS:如果可能的话,我宁愿不编辑我的本地 PATH 变量,因为 DLL 应该可以导出到其他机器并且我不想在那里弄乱环境变量,除非绝对必要

c++ unit-testing dll visual-studio-2017
2个回答
0
投票

这个问题可以通过修改文件路径来解决,建议大家参考这个issue中的方法。

您可以将 DLL 的路径添加到工具 > 选项 > 项目和解决方案 > VC++ 目录下的可执行文件设置(但仅用于构建、执行或调试)

您可以将它们添加到您的全局 PATH 环境变量中

您可以使用我在此处描述的批处理文件启动 Visual Studio,并在该批处理文件中操作路径

您可以将 DLL 复制到可执行文件的目录中


0
投票

引用将答案写为评论的@Richard Critten: “除了一些例外情况,动态库 (DLL) 需要与使用它们的程序(模块)位于同一文件夹中。有关完整详细信息,请参见此处动态链接库搜索顺序。您可以使用 MSVS 中的项目构建后步骤来复制它们到正确的文件夹中。”

请注意,虽然大多数结果会告诉您将 dll 移动到可执行目录 (OutputDir),但在我的情况下,这不起作用,但它肯定也是值得尝试的选项。

© www.soinside.com 2019 - 2024. All rights reserved.