OpenMP vs WinSxS

VS2005

今天把一个工程设置为支持OpenMP, 在代码中使用几个 #pragma omp parallel for 编译后, 程序启动时提示找不到 vcmp.dll.

由于项目中别的工程之前我也用了OpenMP, 并没有出现这个错误, 经过比对发现是忘记 #include <omp.h>

仔细看看 omp.h, 就不难理解为什么需要包含这个头文件了.

为了解决著名的dll hell, 微软在现在的windows系统中引入了WinSxS, 将不同版本的系统共享 dll 分门别类的放在描述性的文件夹下, 文件夹的命名规则是已经严格定义的. 应用程序自身需要包含清单文件 manifest, 来说明自己需要动态链接哪一个版本的什么dll.

omp.h 的作用之一就是生成 vc openmp 的 manifest, 来通知系统 loader 加载 WinSxS 下哪一个 vcmp.dll, 如果没有 manifest, 系统不知如何加载, 自然会提示找不到.

原文地址:https://www.cnblogs.com/skogkatt/p/4163344.html