wafuの技術

勉強の記録です。

dlibを使用したプログラミング

dlibを使用したプログラミングに挑戦

 

以前にdlibを使用した顔認識を試しました。

当時はサンプルプログラムを実行させました。

今度は時間が空きましたがオリジナルプログラミングにチャレンジします。

 

と試してみたら、前回の環境では思うプログラミングができません。

 

○エラー内容
dlib19.17.0_release_32bit_msvc1910.lib(entropy_decoder_kernel_2.obj) : error LNK2038: 'RuntimeLibrary' の不一致が検出さ れました。値 'MD_DynamicRelease' が MT_StaticRelease の値 'face_landmark_detection_ex.obj' と一致しません。
dlib19.17.0_release_32bit_msvc1910.lib(base64_kernel_1.obj) : error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MD_DynamicRelease' が MT_StaticRelease の値 'face_landmark_detection_ex.obj' と一致しません。
dlib19.17.0_release_32bit_msvc1910.lib(gui_core_kernel_1.obj) : error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MD_DynamicRelease' が MT_StaticRelease の値 'face_landmark_detection_ex.obj' と一致しません。
dlib19.17.0_release_32bit_msvc1910.lib(canvas_drawing.obj) : error LNK2038: 'RuntimeLibrary' の不一致が検出されました。 値 'MD_DynamicRelease' が MT_StaticRelease の値 'face_landmark_detection_ex.obj' と一致しません。

 

とりあえず、再作成をすることにしました。

CMAKEとdlibをダウンロードしてきます。

https://cmake.org/

http://dlib.net/

 

dlibはdlib-19.20にアップデートしています。

 

ここから長い戦いになりました。それは割愛します。

■実施したいこと

CPPのオリジナルプログラムを作成したいので、32ビットのスタティックライブラリがほしい。

結論を先に言うと、原因不明ですが成功しました。

 

■手順のメモ

対象フォルだ内で、cmakeコマンドを動作させて、VisualStudio用のSolutionファイルを作成するのですが、失敗です。

1 そのままCMAKEをすると64ビットになってしまいました。

  64ビットのエラー

  スタティックコンパイルする必要があるかもしれません。
dlib19.20.0_release_64bit_msvc1926.lib : warning LNK4272: ライブラリのコンピューターの種類 'x64' がターゲットのコンピュ ーターの種類' x86' と競合しています

 

  32ビットに指定します。

  コマンドを

  dlib-19.20を展開したディレクトの上で

  cmake -G "Visual Studio 16 2019" -A win32 -S dlib-19.20

  

2 CMAKE後に

  VisualStudioで、ソリューションを開いたら、dlibのコードの生成を

  マルチスレッド DLL(/MD)をMTに変更

  先にReleaseにしておきます。

 

これで、libファイルが完成します。

 

完成したlibファイルを使用してみます。

ヘッダファイルは、インクリュードファイルの存在するdlibフォルダを使用しました。結果は、エラーが出ました。

error LNK2019: 未解決の外部シンボル _USER_ERROR__inconsistent_build_configuration__see_dlib_faq_2 が関数 "void __cdecl `dynamic initializer for 'dlib_check_not_configured_helper_variable''(void)" (??__Edlib_check_not_configured_helper_variable@@YAXXZ) で参照されました

 

調べた結果、ヘッダファイルの中のconfig.hとrevision.hをCMAKEを動作させたときに、

作成されたconfig.hとrevision.hで置換します。

 

これで、スタティックコンパイル可能なdlibとlibファイルが作られました。

 

時間があるときに正しいdlibの構築方法を確認したいと思います。