所以我会在这个问题的开头说我是 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 应该可以导出到其他机器并且我不想在那里弄乱环境变量,除非绝对必要
这个问题可以通过修改文件路径来解决,建议大家参考这个issue中的方法。
您可以将 DLL 的路径添加到工具 > 选项 > 项目和解决方案 > VC++ 目录下的可执行文件设置(但仅用于构建、执行或调试)
您可以将它们添加到您的全局 PATH 环境变量中
您可以使用我在此处描述的批处理文件启动 Visual Studio,并在该批处理文件中操作路径
您可以将 DLL 复制到可执行文件的目录中
引用将答案写为评论的@Richard Critten: “除了一些例外情况,动态库 (DLL) 需要与使用它们的程序(模块)位于同一文件夹中。有关完整详细信息,请参见此处动态链接库搜索顺序。您可以使用 MSVS 中的项目构建后步骤来复制它们到正确的文件夹中。”
请注意,虽然大多数结果会告诉您将 dll 移动到可执行目录 (OutputDir),但在我的情况下,这不起作用,但它肯定也是值得尝试的选项。