Ubuntu 20でOpen3Dをソースからビルド
まずgitをインストール。
sudo apt install git
そしてOpen3Dをダウンロード。git cloneをするとレポジトリをダウンロードしてくれる。嫌ならブラウザから行ってDownload Zipとかでもいい。
git clone https://github.com/isl-org/Open3D ~/develop/Open3D
ダウンロードした~/develop/Open3 へ入り、util/ ディレクトリにあるinstall_deps_ubuntu.sh スクリプトを実行。これによりOpen3Dが依存しているものが導入されるらしい。
cd ~/develop/Open3D
sudo bash ./util/install_deps_ubuntu.sh
インストール先のディレクトリ作成
mkdir ~/develop/Open3D_install
ビルドのためのディレクトリ作成
mkdir ~/develop/Open3D/build
ビルドディレクトリへ行き、cmake をOpen3D/ に対して走らせる。この時、CMAKE_INSTALL_PREFIXに上で作成したインストールディレクトリを指定しておく
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=~/develop/Open3D_install
make , 及び make install
make
make install
サンプルコードとビルド
サンプルコード
#include <open3d/Open3D.h>
#include <open3d/geometry/PointCloud.h>
#include <iostream>
#include <memory>
int main(){
std::shared_ptr<open3d::geometry::PointCloud> pc =
std::make_shared<open3d::geometry::PointCloud>();
pc->points_.push_back(Eigen::Vector3d(0.0, 0.1,0.7));
pc->points_.push_back(Eigen::Vector3d(1.0, 0.0,0.0));
pc->points_.push_back(Eigen::Vector3d(0.5,-0.3,0.1));
open3d::io::WritePointCloudToPLY("points.ply",*pc,true);
std::cout << pc->points_.size() << std::endl;
}
ビルド
~/develop/Open3D_install/lib 以下の全てのlibOpen3D*.aをリンクしている。
filesystemを使うためlibstdc++fs.a、OpenMPのために -fopenmp を指定。
g++ test.cpp -I../Open3D_install/include -I../Open3D_install/include/open3d/3rdparty -L../Open3D_install/lib -lOpen3D -lOpen3D_3rdparty_assimp -lOpen3D_3rdparty_blas_mkl_merged -lOpen3D_3rdparty_blas_tbb_static -lOpen3D_3rdparty_civetweb_civetweb-cpp -lOpen3D_3rdparty_civetweb_civetweb -lOpen3D_3rdparty_curl -lOpen3D_3rdparty_embree_embree3 -lOpen3D_3rdparty_embree_embree_avx -lOpen3D_3rdparty_embree_embree_avx2 -lOpen3D_3rdparty_embree_lexers -lOpen3D_3rdparty_embree_math -lOpen3D_3rdparty_embree_simd -lOpen3D_3rdparty_embree_sys -lOpen3D_3rdparty_embree_tasking -lOpen3D_3rdparty_faiss -lOpen3D_3rdparty_filament_backend -lOpen3D_3rdparty_filament_bluegl -lOpen3D_3rdparty_filament_bluevk -lOpen3D_3rdparty_filament_filabridge -lOpen3D_3rdparty_filament_filaflat -lOpen3D_3rdparty_filament_filamat_lite -lOpen3D_3rdparty_filament_filament -lOpen3D_3rdparty_filament_filameshio -lOpen3D_3rdparty_filament_geometry -lOpen3D_3rdparty_filament_ibl -lOpen3D_3rdparty_filament_image -lOpen3D_3rdparty_filament_meshoptimizer -lOpen3D_3rdparty_filament_smol-v -lOpen3D_3rdparty_filament_utils -lOpen3D_3rdparty_filament_vkshaders -lOpen3D_3rdparty_glew -lOpen3D_3rdparty_glfw -lOpen3D_3rdparty_imgui -lOpen3D_3rdparty_ippicv_ippicv -lOpen3D_3rdparty_ippicv_ippiw -lOpen3D_3rdparty_jpeg -lOpen3D_3rdparty_jsoncpp -lOpen3D_3rdparty_liblzf -lOpen3D_3rdparty_png -lOpen3D_3rdparty_qhullcpp -lOpen3D_3rdparty_qhull_r -lOpen3D_3rdparty_rply -lOpen3D_3rdparty_tbb_tbb_static -lOpen3D_3rdparty_tbb_tbbmalloc_static -lOpen3D_3rdparty_tinyfiledialogs -lOpen3D_3rdparty_webrtc_webrtc -lOpen3D_3rdparty_webrtc_webrtc_extra -lOpen3D_3rdparty_zeromq -lOpen3D_3rdparty_zlib -lstdc++fs -fopenmp
余談
一週間近く掛けた気がするが、実はcmakeのビルドで失敗していただけでそこがちゃんどできればOpen3Dのほうは殆ど何も迷うことがなかった。