[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