Ubuntu20.04安装Open3d
# To install Open3D Python packages
$ pip install open3d
# To install Open3D C++ packages
$ git clone https://github.com/isl-org/Open3D
$ cd Open3D
$ util/install_deps_ubuntu.sh # Only needed for Ubuntu
$ mkdir build && cd build
$ cmake ..
$ make
$ sudo make install
python安装
pip3 install open3d
把解决方案贴在前面。
cmake ..
这步可能出现下面描述的问题,请把它调整为:
cmake .. -DBUILD_ISPC_MODULE=ON
剩下继续上面的安装命令即可
这个很好解决。
我需要编译的工程,也就是 https://github.com/isl-org/Open3D
它的Cmake最低版本要求是3.20,我的版本是3.16,做一下升级即可。
可以查看我的另外一篇博客:Ubuntu20.04升级cmake(不用去额外删除现有版本)
我在执行cmake..
时出现错误,报错内容如下:
/home/chen/CodeBase/Open3D/cmake/ispc_isas/../../cpp/open3d/utility/Preprocessor.h:1:1750: warning: null character ignored
/home/chen/CodeBase/Open3D/cmake/ispc_isas/../../cpp/open3d/utility/Preprocessor.h:3:280:
Error: Illegal character: � (0xffffff9d)
make[2]: *** [CMakeFiles/ispc_isas.dir/build.make:92:CMakeFiles/ispc_isas.dir/ISADispatcher.ispc.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:83:CMakeFiles/ispc_isas.dir/all] 错误 2
make: *** [Makefile:91:all] 错误 2
CMake Error at cmake/Open3DMakeISPCInstructionSets.cmake:57 (find_program):
Could not find ISPC_ISAS_EXECUTABLE using the following names: ispc_isas
Call Stack (most recent call first):
CMakeLists.txt:420 (open3d_make_ispc_instruction_sets)
-- Configuring incomplete, errors occurred!
See also "/home/chen/CodeBase/Open3D/build/CMakeFiles/CMakeOutput.log".
报错内容的前两个部分,报错了很多行,而且内容非常一致。
观察报错内容,我们找到了CMakeLists.txt对应的行,在52-56行
if(NOT LINUX_AARCH64 AND NOT APPLE_AARCH64)
option(BUILD_ISPC_MODULE "Build the ISPC module" ON )
else()
option(BUILD_ISPC_MODULE "Build the ISPC module" OFF)
endif()
最开始我认识是第57行BUILD_COMMON_ISPC_ISAS
的问题
option(BUILD_COMMON_ISPC_ISAS "Build for common ISPC ISAs (for release)" OFF)
所以我利用了两种办法进行解决
第一种是:
cmake .. -DBUILD_COMMON_ISPC_ISAS=ON
第二种是将CMakeLists.txt中的该变量,OFF改成ON
option(BUILD_COMMON_ISPC_ISAS "Build for common ISPC ISAs (for release)" ON)
这两种办法都暂时让cmake不会报错了。
其中我们发现函数在对系统进行判断后,会对BUILD_ISPC_MODULE
进行ON或者OFF的设定
我们发现,这个变量被置成了OFF,这样参数没有起作用,导致了编译失败
但是在执行make
的时候,会弹出无数个如下的错误。
/home/chen/CodeBase/Open3D/cpp/open3d/utility/Preprocessor.h:16:78: warning: null character ignored
/home/chen/CodeBase/Open3D/cpp/open3d/utility/Preprocessor.h:19:117: warning: null character(s) preserved in string literal
/home/chen/CodeBase/Open3D/cpp/open3d/utility/Preprocessor.h:19:191: warning: missing terminating ' character
/home/chen/CodeBase/Open3D/cpp/open3d/utility/Preprocessor.h:20:78: warning: missing terminating '"' character
R/<9D>*k*#\`<A8>g<BE><F2><U+0008><94><C2>qr<E1><U+0017>BO]Q<FA><U+0005><F0>Q۲C<U+0013>*<U+0003>,<FD><82><U+0005><9E><B2>ydn<D0><D0><F4>O߯<98><96><81>ĕm<85>s<B1><FB><BE>W6\|Ƹ<U+000E><A5><B8> o<D8><C3>%<E0>J<91><80>Xe8<A0>I`<86>b<80>ض@H<84>!WS9z" <BE>J<D9><F9><U+001E>3\<D9><U+0019>V<U+001E><U+0006><C2>P<BC><EB><D2><U+0000><D7>Ό<U+0014> MJ<AE><BC><B5>'<C5>f<8F><B7><U+0006><87>Fc<9A><F6>ݘ<99>
In file included from /home/chen/CodeBase/Open3D/cpp/open3d/core/Indexer.ispc:27:
In file included from /home/chen/CodeBase/Open3D/cpp/open3d/core/Indexer.isph:29:
In file included from /home/chen/CodeBase/Open3D/cpp/open3d/core/ParallelFor.isph:29:
In file included from /home/chen/CodeBase/Open3D/cpp/open3d/utility/Helper.isph:31:
这些错误是一致的而且很多,多到忽略了真实的提示。因此我在执行make时,不等错误全部输出时,就ctrl+c进行了中断,终于看到了shell正确提示的错误。
/home/chen/CodeBase/Open3D/cpp/open3d/core/Indexer.ispc
/home/chen/CodeBase/Open3D/cpp/open3d/core/Indexer.isph
github上的issue上,我发现应该是作者之一进行了这样的描述:.ispc是ispc编译器自动生成的文件。报的错误实际上是字符错误,同时我打开了工程中的Indexer.ispc
和Indexer.isph
文件,我发现vscode并没有将这些看似是C++代码的进行变色,在我的工程里他们的字体是白色的。我觉得这本身是一件很奇怪的问题。
因此我打算关掉BUILD_ISPC_MODULE
,因为这个变量的名字是说是否使用ISPC模块,我想尝试关掉这个模块会怎么样。不出我所料,Open3d这次被成功编译并且安装了。解决方案在上面写了,这里在写一遍。
cmake .. -DBUILD_ISPC_MODULE=ON
在util/install_deps_ubuntu.sh
中,我们还发现这样的一句话:
if [ "$DISTRIB_ID" == "Ubuntu" -a "$DISTRIB_RELEASE" == "18.04" ]; then
# Ubuntu 18.04's clang/libc++-dev/libc++abi-dev are version 6.
# To build Filament from source, we need version 7+.
deps=("${deps[@]/clang/clang-7}")
deps=("${deps[@]/libc++-dev/libc++-7-dev}")
deps=("${deps[@]/libc++abi-dev/libc++abi-7-dev}")
fi
显然如官网所说,Open3d在Ubuntu18.04中进行安装。我的系统是Ubuntu20.04,显然不会进入下面的安装步骤。
我安装时,为以防万一,将18.04
改成了20.04
。但我认为这是无关紧要的一条更改,因为20.04可能本身版本就是7+(当然了,我并没有去确认这件事…)。