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, 系统不知如何加载, 自然会提示找不到.

Advertisements

About HyperIris

Wild Scientist
此条目发表在编程艺术分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s