c++ - 在加载我自己的 DLL 时找不到正确的 MSVCP140d.dll 依赖项,即使它存在于文件夹中
问题描述
今天我遇到了一个问题。
我正在构建自己的 DLL(C++),用作 OpenCities Map 的插件。在我的本地计算机(用于开发项目的同一台计算机)上,一切正常,我的 DLL 加载没有问题,一切正常。但是,今天我在虚拟机上尝试了同样的事情,看看它是否在其他机器上也能正常工作。那是当我遇到问题说我的 DLL 由于它的某些依赖项而无法加载(这是我的猜测)。
于是我开始调查。我使用DependencyWalker和Proccess Monitor来查看 DLL 是如何加载的以及失败的原因。输出让我更加困惑。
在我的本地机器上,当我打开 DLL 时,它还可以加载 MSVCP140D.dll 等依赖项。
我假设我什至可以看到它的内容和整个路径(当我单击以显示完整路径时)。进程监视器还显示它是从我在 Dependency walker 中看到的文件夹中正确加载的。
起初我看到它在名为 MSVCP140D.dll 的大写 DLL 中失败,但随后它以正确的路径 (System32/msvcp140d.dll) 成功。
现在是虚拟机(或其他计算机)。在这里,我在依赖项walker 中看不到msvcp140d.dll 的路径,所以我也看不到内容(或该DLL 中的其他包含)
然后,即使它看起来是正确的路径,它也无法在进程管理器中加载这些 DLL。问题是,它查找大写的 DLL 名称 MSVCP140d.dll(我可以从字面上看到 system32 文件夹中的 msvcp140d.dll),结果未找到名称。为什么它寻找 MSVCP140D.dll 而不是 msvcp140d.dll ?我的意思是,我希望像在我的本地机器上一样,开始寻找小写的 dll 版本,但它仍然只寻找大写的版本。
我尝试安装 VS 可再发行组件、.NET 框架,但没有任何效果。我正在使用 VS17 构建项目,它的 x64 DLL 还带有 /clr 和 /MDd 开关(如果有帮助的话)。
我会在特定的 OpenCities Map 论坛上提问,但这对我来说就像是某种一般的建筑问题,我错过了一些东西。
你们有什么建议吗?感谢您的任何建议。
解决方案
您不应该根据运行时库 DLL 的调试版本发布代码。微软不支持这个。DLL 名称不区分大小写,顺便说一句,这是一条红鲱鱼。
推荐阅读
- batch-file - 有没有办法在 bat 脚本中评估字符串文字中的变量?
- css - vuetify v-data-table 每页行选项不显示
- shell - Linux 脚本的 while 循环中的用户输入
- firebase - Firebase 存储 - 如何授权文件下载?
- javascript - 更新 3 级嵌套数组 mongoose
- deno - Deno 相当于 Reader/Conn 的“窥视”?
- mixed-models - 具有不同结果测量次数的多变量多级模型
- selenium - 使用不同数据库文件的 Flask 应用程序进行 Selenium 测试
- python - 你如何编写一个绘制...2的pygame函数
- python - 如何更有效地组织 Padas Dataframes 中单元格内的元组列表?