c++ - 与 Microsoft CRT 和 OpenMP 静态链接

标签 c++ windows visual-c++ openmp msvcrt

我正在开发一些有时用于类似嵌入式场景的 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/

相关文章:

c++ - 在 VS2013 中初始化 std::discrete_distribution

c++ - 如何找到有多少指针指向链表中的特定节点?

windows - 如何为 ReadFileEx() 的完成例程提供上下文信息?

java - 使用域配置在服务器上启动 Wildfly 10.0.0.final 时出错

c++ - 在 vim 中保留 C++ 注释中的缩进

C++ 不可重载函数

windows - .bat 文件中的管道分隔符

c++ - 如何让定时器在后台保持运行

c# - VC++属于托管类还是非托管类?

c++ - C++11 中友元模板类的 Visual C++ 错误