質問: ### 前提・実現したいこと ORB-SLAM2 をWindows10に導入するにあたり、 描画ライブラリ Pangolin を入れたい。 ### 導入手順 (1)PangolinをC:\lib\Pangolin に解凍 (2)CMake バージョン : 3.10.0 Specify generator for this project に Visual Studio 12 2013 Win64 を指定して、Configure & Generate → 成功 (3)Visual Studio 生成された C:\lib\Pangolin\build\Pangolin.sln を起動 ALL_BUILDをReleaseモードでビルド ### 発生している問題・エラーメッセージ pangolinにエラーが発生(抜粋) ``` 6> depthsense.cpp 6>C:\lib\Pangolin\include\pangolin/gl/glsl.h(205): error C2065: 'thread_local' : 定義されていない識別子です。 6>C:\lib\Pangolin\include\pangolin/gl/glsl.h(205): error C2146: 構文エラー : ';' が、識別子 'GlSlUtilities' の前に必要です。 6>C:\lib\Pangolin\include\pangolin/gl/glsl.h(205): error C2146: 構文エラー : ';' が、識別子 'instance' の前に必要です。 6>C:\lib\Pangolin\include\pangolin/gl/glsl.h(205): error C2275: 'pangolin::GlSlUtilities' : この型は演算子として使用できません 6>C:\lib\Pangolin\include\pangolin/gl/glsl.h(205): error C2065: 'instance' : 定義されていない識別子です。 6>C:\lib\Pangolin\include\pangolin/gl/glsl.h(206): error C2065: 'instance' : 定義されていない識別子です。 6>C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\include\DepthSenseTypes.h(40): warning C4005: 'PRId64' : マクロが再定義されました。 6>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\inttypes.h(126) : 'PRId64' の前の定義を確認してください 6>C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\include\DepthSenseTypes.h(41): warning C4005: 'PRIi64' : マクロが再定義されました。 6>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\inttypes.h(132) : 'PRIi64' の前の定義を確認してください 6>C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\include\DepthSenseTypes.h(42): warning C4005: 'PRIu64' : マクロが再定義されました。 6>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\inttypes.h(144) : 'PRIu64' の前の定義を確認してください 6>C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\include\DepthSenseTypes.h(43): warning C4005: 'PRIx64' : マクロが再定義されました。 6>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\inttypes.h(150) : 'PRIx64' の前の定義を確認してください 6>C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\include\DepthSenseTypes.h(46): warning C4005: 'INT64_C' : マクロが再定義されました。 6>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\stdint.h(129) : 'INT64_C' の前の定義を確認してください 6>C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\include\DepthSenseTypes.h(47): warning C4005: 'UINT64_C' : マクロが再定義されました。 6>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\stdint.h(134) : 'UINT64_C' の前の定義を確認してください 6>C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\include\DepthSense-public.hxx(632): warning C4275: DLL インターフェイスではない class 'std::exception' が DLL インターフェイスのベースになる class 'DepthSense::Exception' として使われています。 6>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\exception(90) : 'std::exception' の宣言を確認してください。 6>C:\Program Files (x86)\SoftKinetic\DepthSenseSDK\include\DepthSense-public.hxx(631) : 'DepthSense::Exception' の宣言を確認してください。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(55): error C2061: 構文エラー : 識別子 'ImageDim' 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(92): error C2146: 構文エラー : ';' が、識別子 'dim' の前に必要です。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(92): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(142): error C2061: 構文エラー : 識別子 'ImageDim' 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(70): error C2511: 'pangolin::DepthSenseVideo *pangolin::DepthSenseContext::GetDepthSenseVideo(size_t,pangolin::DepthSenseSensorType,pangolin::DepthSenseSensorType,pangolin::ImageDim,pangolin::ImageDim,unsigned int,unsigned int,const pangolin::Uri &)' : オーバーロードされたメンバー関数が 'pangolin::DepthSenseContext' にありません。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(135) : 'pangolin::DepthSenseContext' の宣言を確認してください。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(71): error C2597: 静的でないメンバー 'pangolin::DepthSenseContext::running_devices' への参照が正しくありません。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(71): error C3867: 'pangolin::DepthSenseContext::running_devices': 関数呼び出しには引数リストがありません。メンバーへのポインターを作成するために '&pangolin::DepthSenseContext::running_devices' を使用してください 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(73): error C2597: 静的でないメンバー 'pangolin::DepthSenseContext::g_context' への参照が正しくありません。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(77): error C2228: '.getDevices' の左側はクラス、構造体、共用体でなければなりません 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(81): error C2661: 'pangolin::DepthSenseVideo::DepthSenseVideo' : 8 個の引数を伴うオーバーロードされた関数はありません。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(124): error C2511: 'pangolin::DepthSenseVideo::DepthSenseVideo(DepthSense::Device,pangolin::DepthSenseSensorType,pangolin::DepthSenseSensorType,pangolin::ImageDim,pangolin::ImageDim,unsigned int,unsigned int,const pangolin::Uri &)' : オーバーロードされたメンバー関数が 'pangolin::DepthSenseVideo' にありません。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(51) : 'pangolin::DepthSenseVideo' の宣言を確認してください。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(126): error C2550: 'pangolin::DepthSenseVideo::{ctor}' : コンストラクターの初期化子リストはコンストラクターの定義だけに許されます。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(127): error C2597: 静的でないメンバー 'pangolin::DepthSenseVideo::frame_properties' への参照が正しくありません。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(127): error C3867: 'pangolin::DepthSenseVideo::frame_properties': 関数呼び出しには引数リストがありません。メンバーへのポインターを作成するために '&pangolin::DepthSenseVideo::frame_properties' を使用してください 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(127): error C2597: 静的でないメンバー 'pangolin::DepthSenseVideo::streams_properties' への参照が正しくありません。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(128): error C2597: 静的でないメンバー 'pangolin::DepthSenseVideo::streams_properties' への参照が正しくありません。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(129): error C2227: '->get' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(129): error C2059: 構文エラー : ')' 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(131): error C2597: 静的でないメンバー 'pangolin::DepthSenseVideo::sensorConfig' への参照が正しくありません。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(131): error C3867: 'pangolin::DepthSenseVideo::sensorConfig': 関数呼び出しには引数リストがありません。メンバーへのポインターを作成するために '&pangolin::DepthSenseVideo::sensorConfig' を使用してください 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(131): error C2109: 配列または、ポインターでない変数に添字が使われました。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(132): error C2597: 静的でないメンバー 'pangolin::DepthSenseVideo::sensorConfig' への参照が正しくありません。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(132): error C3867: 'pangolin::DepthSenseVideo::sensorConfig': 関数呼び出しには引数リストがありません。メンバーへのポインターを作成するために '&pangolin::DepthSenseVideo::sensorConfig' を使用してください 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(132): error C2109: 配列または、ポインターでない変数に添字が使われました。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(133): error C2352: 'pangolin::DepthSenseVideo::ConfigureNodes' : 静的でないメンバー関数の呼び出しが正しくありません 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(97) : 'pangolin::DepthSenseVideo::ConfigureNodes' の宣言を確認してください。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(367): error C2039: 'dim' : 'pangolin::DepthSenseVideo::SensorConfig' のメンバーではありません。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(90) : 'pangolin::DepthSenseVideo::SensorConfig' の宣言を確認してください。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(381): error C2039: 'dim' : 'pangolin::DepthSenseVideo::SensorConfig' のメンバーではありません。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(90) : 'pangolin::DepthSenseVideo::SensorConfig' の宣言を確認してください。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(381): error C2228: '.x' の左側はクラス、構造体、共用体でなければなりません 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(382): error C2039: 'dim' : 'pangolin::DepthSenseVideo::SensorConfig' のメンバーではありません。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(90) : 'pangolin::DepthSenseVideo::SensorConfig' の宣言を確認してください。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(382): error C2228: '.y' の左側はクラス、構造体、共用体でなければなりません 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(402): error C2039: 'dim' : 'pangolin::DepthSenseVideo::SensorConfig' のメンバーではありません。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(90) : 'pangolin::DepthSenseVideo::SensorConfig' の宣言を確認してください。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(417): error C2039: 'dim' : 'pangolin::DepthSenseVideo::SensorConfig' のメンバーではありません。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(90) : 'pangolin::DepthSenseVideo::SensorConfig' の宣言を確認してください。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(417): error C2228: '.x' の左側はクラス、構造体、共用体でなければなりません 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(418): error C2039: 'dim' : 'pangolin::DepthSenseVideo::SensorConfig' のメンバーではありません。 6>C:\lib\Pangolin\include\pangolin/video/drivers/depthsense.h(90) : 'pangolin::DepthSenseVideo::SensorConfig' の宣言を確認してください。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(418): error C2228: '.y' の左側はクラス、構造体、共用体でなければなりません 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(442): warning C4244: '=' : 'uint64_t' から 'double' への変換です。データが失われる可能性があります。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(502): warning C4244: '=' : 'uint64_t' から 'double' への変換です。データが失われる可能性があります。 6>C:\lib\Pangolin\src\video\drivers\depthsense.cpp(648): error C2660: 'pangolin::DepthSenseContext::GetDepthSenseVideo' : 関数に 8 個の引数を指定できません。 ``` ### エラー発生源のソースコード C:\lib\Pangolin\src\video\drivers\depthsense.cpp stevenlovegrove/Pangolin/~/depthsense.cpp - GitHub 自分ではソースコードやCMakeの参照値は変更していません。 SLAMの実装に詳しい方がいらっしゃいましたら、考えられる原因をご指摘いただけたらと思います。 よろしくお願いします。
回答: こんにちは。 最初のエラーにでている thread_local はスレッド・ローカル・ストレージ.aspx)の指定です。 thread_local というキーワードで指定できるようになったのは、Visual C++ 2015以降のようです。 PangolinはC++11が必須と書かれていましたので、C++11対応度の低いVisual C++ 2013では無理なのかも知れません。Visual C++ 2015以降ならC++11対応と言って良いようです。