Regen Techlog

Web・プログラミングの技術メモ

VC++9.0でOpenMP使用時の注意点

   

OpenMPを使ったCライブラリをPythonで使うためにPython本体のバージョンと合わせてVC++9.0でコンパイルしていたときに気づいたのですが、出来上がったDLLをロードするとVC++ランタイムがインストールされているにも関わらず、vcomp90.dllが見つからないとエラーが出ました。この問題で少々時間を食ったので原因と解決方法をメモしておきます。

原因

まず、システムがvcomp90.dllを見つけられなかった原因は、マニフェストファイルに「Microsoft.VC90.OpenMP」の記載がなかったことでした。

マニフェストファイルとは依存する共有ライブラリのバージョンなどを指定するファイルで、システムはそれを見て適切なDLLをロードします。通常、実行ファイルや共有ライブラリをコンパイルする際にVC++が依存ライブラリをスキャンして生成してくれます。今回はマニフェストにOpenMPライブラリの記載がなかったためvcomp90.dllを見つけられなかった訳です。

ではなぜOpenMPを使用してるのにもかかわらずマニフェストにOpenMPの記載がなかったかというと、その原因は「omp.h」をインクルードしていないことでした。VC++9.0では、「omp.h」をインクルードすることがマニフェストにOpenMPを記載するトリガーのようです。

ちなみに、VC++11.0やVC++12.0では「omp.h」をインクルードしていなくても適切にOpenMPライブラリをロードできているようでした。

解決方法

「omp.h」をインクルードしましょう。

 - プログラミング ,

コメントを残す

  関連記事

「Unable to find vcvarsall.bat」の対処法

C/C++などのビルドが必要なファイルを含むPythonパッケージをWindow …

子テーマでサイドバーを最後に追加する

WordPressでテーマをカスタマイズする場合は子テーマを使うのが一般的ですが …

WindowsでPython Netifacesをインストールする

Pythonでマジックパケットを監視してみようと思ってプログラムを書いていたので …

Pythonで簡単にWindowsサービスを作る

Pythonで書いた処理をバックグラウンドで動かしておきたいときに、Window …

lxmlでスクレイピングするときのコツ

PythonでスクレイピングをしようとするとBeautifulSoup4やlxm …

THETA画像のEXIF読み取りと傾き補正

最近一部で話題のTHETA(ワンショット全球パノラマカメラ)ですが,THETAを …

Python小ネタ

Pythonの意外と知られていない小ネタを紹介します。

Suspend on LAN

ネットワークに接続されたPCを遠隔で起動する技術にWake on LAN(WoL …

browsercookiejar: ブラウザのCookieをPythonから利用する

ウェブスクレイピングの記事を書きましたが、ログインが必要なページから情報を取得す …

SourceTreeのGit-Flowで必ずno-ffする

GUIでGit操作ができるクライアントの一つSourceTreeですが、Git- …