WindowsでOpen3D 0.18.0 に更新した
古いOpen3D( 0.9.0.0 )について
VC++のC++言語標準をISO C++ 20に設定したところ、以下のエラーが出た。
1>Open3D\3rdparty\Eigen\Eigen\src\Core\util\Meta.h(441,25): error C2039: 'result_of': 'std' のメンバーではありません
1>Open3D\3rdparty\Eigen\Eigen\src\Core\util\Meta.h(441,34): error C2059: 構文エラー: '<'
1>Open3D\3rdparty\Eigen\Eigen\src\Core\util\Meta.h(441,39): error C2039: 'type': '`global namespace'' のメンバーではありません
1>Open3D\3rdparty\Eigen\Eigen\src\Core\util\Meta.h(441,49): error C2238: ';' の前に無効なトークンがあります。
1>Open3D\3rdparty\Eigen\Eigen\src\Core\util\Meta.h(442,31): error C2065: 'type1': 定義されていない識別子です。
1>Open3D\3rdparty\Eigen\Eigen\src\Core\util\Meta.h(442,20): error C2923: 'Eigen::internal::remove_all': 'type1' は、パラメーター 'T' の有効な テンプレート 型引数ではありません
1>Open3D\3rdparty\Eigen\Eigen\src\Core\util\Meta.h(442,39): error C2955: 'Eigen::internal::remove_all': クラス テンプレート を使用するには テンプレート 引数リストが必要です
1>Open3D\3rdparty\Eigen\Eigen\src\Core\CwiseBinaryOp.h(155,22): error C2976: 'Eigen::internal::generic_xpr_base': 引数 テンプレート が少なすぎます
1>Open3D\3rdparty\Eigen\Eigen\src\Core\CwiseUnaryOp.h(95,22): error C2976: 'Eigen::internal::generic_xpr_base': 引数 テンプレート が少なすぎます
1>Open3D\Geometry\VoxelGrid.h(120,37): error C1903: 直前のエラーを修復できません。コンパイルを中止します。
Open3DConfig.h を確認してみると、バージョン 0.9.0.0だった。
#define OPEN3D_VERSION "0.9.0.0"
調べた限りまともな対処法がないので、Open3Dを最新版にする。
Open3D 0.18.0.0 のインストール
公式 https://www.open3d.org/ の下のほうへ行き、0.18.0を選択する。
展開してC++20で使用。
そのままだとC4996が出るので、#pragma warning(disalbe:4996) を入れる。
あるいは
_SILENCE_CXX20_IS_POD_DEPRECATION_WARNING
_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING
を定義する。
open3d\core\Tensor.h(65,19): error C4996: 'std::is_pod<int64_t>': warning STL4025: std::is_pod and std::is_pod_v are deprecated in C++20. The std::is_trivially_copyable and/or std::is_standard_layout traits likely suit your use case. You can define _SILENCE_CXX20_IS_POD_DEPRECATION_WARNING or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.
#pragma warning(disable:4996)
#if defined(_DEBUG)
#pragma comment(lib,"C:\\libraries\\Open3D-0.18.0\\debug\\lib\\Open3D.lib")
#else
#pragma comment(lib,"C:\\libraries\\Open3D-0.18.0\\release\\lib\\Open3D.lib")
#endif
#include <Open3D/Open3D.h>
#include <iostream>
int main()
{
std::string filename = "bunny.ply";
auto mesh = open3d::io::CreateMeshFromFile(filename);
auto pcd = open3d::io::CreatePointCloudFromFile(filename);
}