[openrtm-staff:926] 9/8の作業報告(河内)
河内 のぶ
n-kawauchi @ openrtm.org
2017年 9月 8日 (金) 19:17:40 JST
安藤様
河内です
本日の作業内容をお知らせします。
-----------
■vc2017 + OpenCV3.2 でのCMakeエラー調査の続き
・原因はvc2017の内部バージョン番号が更新されたため、
これに対応していないOpenCVConfig.cmakeで判定できなかったため
・河合さん、私、そしてvc2017を更新した講習会用ノートPCでこの状況が発生
・vc2017がリリースされた時はCMake用MSVC_VERSIONの値は1910で、
内部コードは14.10だった。これはJenkins環境のログでも確認できる。
vc2017をインストール後に更新していないので、8/10に実行した
ImageProcessingのビルドも正常終了している
http://openrtm.org:8080/view/10_ImageProcessing/job/10_IPC-build-win64/16/label=windows10-vc2017-x64/consoleFull
:
-- The C compiler identification is MSVC 19.10.25017.0
-- The CXX compiler identification is MSVC 19.10.25017.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft
Visual Studio/2017/Community/VC/Tools/MSVC/14.10.25017/bin/HostX86/x64/cl.exe
⇒MSVC 19.10 より、MSVC_VERSIONは1910
・このビルドではOpenRTM-aist 1.2.0 に加えているビルド済みのバイナリを
展開して使っている。
http://staging.openrtm.org/pub/Windows/OpenRTM-aist/msi-buildtools/1.2.0/OpenCV32_vc15_x86_64.zip
これに OpenCV3.2\OpenCVConfig.cmake が含まれる。この中にVCバージョン
により利用するバイナリを振り分ける処理が入っている。
if(MSVC_VERSION EQUAL 1400)
set(OpenCV_RUNTIME vc8)
:
elseif(MSVC_VERSION EQUAL 1900)
set(OpenCV_RUNTIME vc14)
elseif(MSVC_VERSION EQUAL 1910) ←★1
set(OpenCV_RUNTIME vc15)
endif()
・ところが、vc2017のMSVC_VERSIONが1911に更新されたため上記の判定では
OpenCV_RUNTIMEが定義されずCMakeエラーとなる。
原さんにうかがったところ、この変更はつい最近のことのようです。
・私の環境(昨日vc2017をダウンロード・インストール)でのCMake実行結果
The C compiler identification is MSVC 19.11.25507.1
The CXX compiler identification is MSVC 19.11.25507.1
Check for working C compiler: C:/Program Files (x86)/Microsoft Visual
Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/HostX86/x86/cl.exe
⇒MSVC_VERSIONは1911で、内部コードは14.11となり更新されている
・8/3にリリースされたOpenCV3.3をダウンロードして確認してみたところ
上の★1の行に 1911 が追加されいます。
elseif(MSVC_VERSION EQUAL 1910 OR MSVC_VERSION EQUAL 1911)
set(OpenCV_RUNTIME vc15)
▼OpenRTM-aist 1.2.0での対応
・Windowsインストーラに組み込むOpenCVは3.3にする
・今後、またvc2017が更新されても対応できるように、★1の行は1910以上に
しておきたい。
elseif(MSVC_VERSION GREATER_EQUAL 1910) ←◎
set(OpenCV_RUNTIME vc141) ←★2 vc15からvc141へ変更
endif()
・★2は、vc2017のRTM_VC_VERSIONをvc141に変更することへの対応。
PATHへ %OpenCV_DIR%x86\%RTM_VC_VERSION%\bin\ を追加しているので
この設定で利用できる環境にする。
■下記不具合の調査
・RTM_VC_VERSIONを変えてもPATHに反映されないことがある(1.1.2)
http://redmine.openrtm.org/issues/4015
・河合さんのPC上でも発生
・河合さんの環境での原因は、レジストリに登録されているPATHが環境変数が
展開された形式で登録されていたため。
・河合さんがうかがった手順で、私もスナップショットから起動したきれいな
環境で下記手順を試したが再現しなかった。
1)OpenRTM-aist 1.1.2 + vc2013 の環境構築
2)OpenRTM-aist 1.2.0インストール(ラジオボタンでvc2013選択)
3)vc2013をアンインストールし、vc2017をインストール
4)VCVerChangerでvc12→vc15へ変更したがPATHに反映されない
・本来ならばPATHには以下の形式で登録されている
-----
C:\Program Files(x86)\OpenRTM-aist\1.1.2\bin\%RTM_VC_VERSION%\;
%OMNI_ROOT%bin\x86_win32\;
%OpenCV_DIR%x86\%RTM_VC_VERSION%\bin\
・河合さんの場合、これが何故か展開されて登録されていた
-----
C:\Program Files\OpenRTM-aist\1.2.0\bin\vc12\;
C:\Program Files\OpenRTM-aist\1.2.0\omniORB\4.2.2_vc12\bin\x86_win32\;
C:\Program Files\OpenRTM-aist\1.2.0\OpenCV3.2\x64\vc12\bin\;
・このため、vc2013をアンインストールし、vc2017をインストール後に
VCVerChangerでRTM_VC_VERSIONを更新させてもPATH設定だけが更新されない
状況になっていた(これが昨日確認させてもらった状況)
・その後、OpenRTM-aist 1.2.0版を再インストールされたようで、今朝の確認
では古い設定が残ったままレジストリに追加されていた。
-----
C:\Program Files\OpenRTM-aist\1.2.0\bin\vc12\;
C:\Program Files\OpenRTM-aist\1.2.0\omniORB\4.2.2_vc12\bin\x86_win32\;
C:\Program Files\OpenRTM-aist\1.2.0\OpenCV3.2\x64\vc12\bin\;
C:\Users\kawai\AppData\Local\Microsoft\WindowsApps;
C:\Program Files (x86)\Graphviz2.38\bin;
C:\Program Files\OpenRTM-aist\1.2.0\bin\%RTM_VC_VERSION%\;
%OMNI_ROOT%bin\x86_win32\;
%OpenCV_DIR%x64\%RTM_VC_VERSION%\bin\;
・レジストリに登録した内容がインストール時と比べて変更されていた場合、
アンインストールしても削除されないことは経験している
・上の例もパスが展開された方がゴミとして残ってしまったのでは?
・パスは頭から探すので、これではvc2017の環境でCMakeがエラーになる。
このため手動でvc12用のパスを削除した。
・VCVerChangerは、PATHの設定で環境変数が展開された状態でレジストリに
登録されているケースを想定していなかった。
・このトラブルの原因はつかめていないが、発生してしまった場合、
VCVerChangerで下記の対応をすればトラブルから抜け出せそう
・VCバージョンを更新された時、PATHの中から%RTM_VC_VERSION%等の環境変数
が展開されたものが登録されていたら削除する
・同様に、RTM_ROOTの設定を含まないパスも削除する。この対応をすれば、
宮本くんから報告があった下記チケットのケースも回避できそうです。
-----
1.1.2をアンインストール後に1.2.0をインストールした場合の環境変数
http://redmine.openrtm.org/issues/4019
以上です。
--
------------------------------------------------------------------------
河内 のぶ n-kawauchi @ openrtm.org
More information about the openrtm-staff
mailing list