静态链接Microsoft CRT和OpenMP

时间:2016-05-04 20:48:40

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

我正在开发一些有时在嵌入式场景中使用的Windows软件。对于我的用户来说,拥有专用的Win7或Win8 PC并不常见,他们从未更新,甚至连接到互联网。用户将这些PC插入特定的工业硬件,并将该系统仅用于一个作业。

我的软件包含用Visual C ++编写的组件。我使用适当的安装程序合并模块在我的MSI包中包含CRT。

不幸的是,对于一台从未更新的PC,这不起作用:今天我收到了一个错误报告,应用程序在启动时崩溃说“无法启动,因为api-ms-win-crt-stdio-l1-1您的计算机缺少-0.dll“

This answer建议与CRT建立静态链接。

那样做了。但是我的C ++代码的某些部分依赖于OpenMP来实现并行性。

Dependency walker向我展示了我正在构建的DLL依赖于vcomp140.dll,即使使用Multi-threaded (/MT)运行时库设置进行编译也是如此。

此外,它显示vcomp140.dll仅依赖于kernel32.dll和user32.dll。

我可以将单个DLL vcomp140.dll放在安装文件夹中吗?它可以在离线Windows 7 PC上运行吗?

2 个答案:

答案 0 :(得分:1)

基于VS2015 Redistribution List我会说复制该文件确实是你需要做的,并且可以正常工作(如果你使用VS2015构建你的应用程序)。注意根据arm / x86 / x64复制正确的dll。

答案 1 :(得分:1)

为了说清楚,不可能将openmp与Visual Studio静态链接。你只能做两件事:

  • 删除openmp(并使用/ MT / MTd编译)
  • 使用您的应用程序部署vcomp140.dll(或VC可再发行组件)