我正在开发一些有时在嵌入式场景中使用的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上运行吗?
答案 0 :(得分:1)
基于VS2015 Redistribution List我会说复制该文件确实是你需要做的,并且可以正常工作(如果你使用VS2015构建你的应用程序)。注意根据arm / x86 / x64复制正确的dll。
答案 1 :(得分:1)
为了说清楚,不可能将openmp与Visual Studio静态链接。你只能做两件事: