4
Help us understand the problem. What are the problem?

posted at

updated at

OpenCV with QtのDLLジェンガ

はじめに

OpenCVのGUIはQtと一緒にコンパイルすると非常に便利です.
ですが,Qtは,環境に応じて色々なものがダウンロードされるため,数十GBくらい落ちてきます.
不必要なbuild環境を削除しても,手元は12GBもありました.

コンパイル済みのOpenCVのDLLをいろんな場所で使おうとしてコピーするにもQt本体をインストールしなおすことはちょっとあれです.

そこで,OpenCV ジェンガのように,大量にあるQtのDLLを最小構成にしてみます.

なお,OpenCVをwith Qtでコンパイルするためのジェンガではありません.with QtでOpenCVをコンパイルするには本体のかなりを要します.
with Qtで作られたOpenCVのDLLを使って,アプリケーションを実行するためのものです.

本当に必要だったもの

削除しては実行を繰り返して,本当に必要だったものは以下のたった5つのDLLで合計20MBくらいです.
1/1000くらいになりました.

  • Qt5Core.dll
  • Qt5Gui.dll
  • Qt5Test.dll
  • Qt5Widgets.dll
  • plugins\platforms\qwindows.dll

なおデバッグモード時は,dのついた下記5つが必要です.

  • Qt5Cored.dll
  • Qt5Guid.dll
  • Qt5Testd.dll
  • Qt5Widgetsd.dll
  • plugins\platforms\qwindowsd.dll

さぁこれを適当なパスの通ったところにコピーして実行しても残念ながら下のように言われて怒られます.

qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

plugin内のDLLは,パスではなく,どこかから相対指定されている必要がありそうです.
いろいろググった結果環境変数QT_PLUGIN_PATHを定義すればよさそうです.

環境変数として,QT_PLUGIN_PATHとして値を例えばC:\Qt\pluginsとします(場所は任意).
そうしたら,指定した値の場所にqwindows.dllをplatformsのフォルダ内に置けば動きます.
C:\Qt\plugins\platforms\qwindows.dll

結構難易度高めでした.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?