• Ubuntu20.04安装0pen3d及ISPC失败解决方案


    描述

    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
    

    剩下继续上面的安装命令即可

    出现错误

    1. cmake 版本不符

    这个很好解决。
    我需要编译的工程,也就是 https://github.com/isl-org/Open3D
    它的Cmake最低版本要求是3.20,我的版本是3.16,做一下升级即可。

    可以查看我的另外一篇博客:Ubuntu20.04升级cmake(不用去额外删除现有版本)

    2. ISPC_ISAS相关

    我在执行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><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.ispcIndexer.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+(当然了,我并没有去确认这件事…)。

  • 相关阅读:
    VTK基本数据结构
    小红书热点是什么,怎么找到热点话题!
    算法基础:堆【以大根堆为例】
    产品经理就业喜报:沉舟侧畔终迎万木春
    C 语言程序的执行流程
    【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture10 Basic_CNN
    EXPLIAN查询type
    【网络安全】永恒之蓝实战 - Mac通过Metasploit攻击Server2008
    前端周刊第三十五期
    [JavaScript 刷题] 树 - 二叉搜索树中的插入操作, leetcode 701
  • 原文地址:https://blog.csdn.net/weixin_42156097/article/details/126935330