我正在开发一些有时用于类似嵌入式场景的 Windows 软件。对于我的用户来说,拥有专用的 Win7 或 Win8 PC 他们从不更新,甚至不连接到 Internet 的情况并不少见。用户将这些 PC 连接到特定的工业硬件,并仅将该系统用于一项工作。
我的软件包括我用 Visual C++ 编写的组件。我使用适当的安装程序合并模块将 CRT 包含在我的 MSI 包中。
不幸的是,对于从未更新过的 PC,这不起作用:今天我收到错误报告,应用程序在启动时崩溃,提示“无法启动,因为 api-ms-win-crt-stdio-l1-1 -0.dll 从您的计算机中丢失”
This answer建议静态链接到 CRT。
做到了。但是我的 C++ 代码的某些部分依赖于 OpenMP 来实现并行性。
Dependency walker向我展示了我正在构建的 DLL 依赖于 vcomp140.dll,即使在使用多线程 (/MT)
运行时库设置进行编译时也是如此。
它还显示 vcomp140.dll 只依赖于 kernel32.dll 和 user32.dll。
我可以只将单个 DLL vcomp140.dll 放在安装文件夹中吗?它可以在离线 Windows 7 PC 上运行吗?
最佳答案
基于VS2015 Redistribution List我会说复制该文件确实是您需要做的并且可以正常工作(如果您使用 VS2015 构建您的应用程序)。注意复制基于 arm/x86/x64 的正确 dll。
关于c++ - 与 Microsoft CRT 和 OpenMP 静态链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037733/