做网站是干嘛,nginx wordpress 403,沈阳博士男科医院好吗,网站的seo 如何优化1. 环境准备#xff1a;从零开始的Ubuntu 20.04基础配置 大家好#xff0c;我是老张#xff0c;在三维视觉和点云处理这块摸爬滚打十来年了。今天咱们不聊高深算法#xff0c;就聊聊最基础也最让人头疼的一步——在Ubuntu 20.04上把Open3D的C环境给搭起来。我见过太多朋友&…1. 环境准备从零开始的Ubuntu 20.04基础配置大家好我是老张在三维视觉和点云处理这块摸爬滚打十来年了。今天咱们不聊高深算法就聊聊最基础也最让人头疼的一步——在Ubuntu 20.04上把Open3D的C环境给搭起来。我见过太多朋友算法思路清晰代码逻辑严谨结果卡在了环境配置这一步一折腾就是好几天非常打击积极性。所以这篇内容我会把我自己踩过的坑、试过的方法特别是怎么对付那些烦人的依赖冲突掰开揉碎了讲给你听目标就是让你一次成功少走弯路。首先咱们得统一战场。我强烈建议你使用Ubuntu 20.04 LTS这个版本。LTS意味着长期支持社区资源最丰富遇到问题也最容易找到解决方案。别用太新的或者太旧的版本新版本可能库不兼容旧版本可能缺东西20.04是个甜点。如果你是在虚拟机或者全新的系统上操作那最好不过了。如果是在已有的、装了很多杂七杂八软件的系统上那要做好心理准备依赖冲突的概率会大一些。第一步先更新系统把软件源同步到最新状态。打开终端输入下面这两条命令这算是标准起手式了sudo apt update sudo apt upgrade -y这个过程可能会花点时间取决于你的网速和更新包的数量。更新完成后我建议重启一下系统确保所有更新都生效了。接下来我们需要安装一些最基础的开发工具链比如编译器、构建工具和Git。这些是编译任何C项目的基石一个都不能少。执行下面的命令来安装它们sudo apt install -y build-essential cmake git这里的build-essential是一个元包它会帮你把gcc、g、make等核心工具一股脑儿装好。cmake是Open3D的构建系统至关重要。但这里有个巨坑Ubuntu 20.04默认软件源里的CMake版本是3.16而Open3D要求至少是3.24我一开始就是栽在这里编译配置时一堆莫名其妙的错误最后翻看CMakeLists.txt文件才发现版本要求白纸黑字写着呢。所以我们必须手动安装更高版本的CMake。2. 攻克核心难题CMake升级与源码获取2.1 稳妥升级CMake至3.24用默认源里的老版本CMake是绝对不行的。我试过几种升级方法最稳妥、最不容易出问题的是通过官方提供的Kitware仓库来安装。跟着我一步步操作# 首先卸载可能存在的旧版本如果之前没装过这步可以跳过 sudo apt remove --purge -y cmake # 添加Kitware的官方APT仓库 wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg /dev/null echo deb [signed-by/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main | sudo tee /etc/apt/sources.list.d/kitware.list /dev/null # 再次更新软件源并安装新版本CMake sudo apt update sudo apt install -y cmake安装完成后务必用cmake --version命令检查一下。如果显示版本是3.24.x或更高那这一步就完美通过了。如果还是旧版本检查一下是不是有多个CMake路径可以用which cmake看看当前用的是哪个。搞定CMake我们就拿到了打开Open3D大门的钥匙。2.2 获取Open3D源码与初步依赖安装接下来获取Open3D的源代码。我推荐直接从GitHub上克隆官方仓库这样能保证是最新、最全的代码也方便以后更新。git clone https://github.com/isl-org/Open3D.git cd Open3D进到目录后你会发现Open3D很贴心地为Ubuntu用户准备了一个依赖安装脚本util/install_deps_ubuntu.sh。很多教程会直接让你运行这个脚本但根据我的经验直接运行这个脚本大概率会出问题尤其是在已经使用了一段时间的Ubuntu系统上。脚本会尝试安装一长串的开发库比如libgl1-mesa-dev,xorg-dev,libsdl2-dev等等。问题就出在这里这些库之间以及它们和你系统里已有的库版本很容易产生冲突导致经典的“unmet dependencies”未满足的依赖关系错误。我第一次跑这个脚本时终端里噼里啪啦报了一堆错核心信息就是“下列软件包有未满足的依赖关系”然后列出像libosmesa6-dev、libsdl2-dev、xorg-dev这些包都说因为某个关联库的版本不对而无法安装。最后还补一刀“无法修正错误因为您要求某些软件包保持现状它们破坏了软件包间的依赖关系”。这时候如果你按照网上一些零散的建议去手动一个个安装或者降级某个库很容易陷入“依赖地狱”解决一个又冒出来两个。3. 依赖冲突终极解决方案Aptitude实战3.1 为什么Aptitude是救命稻草当我被依赖问题折磨得焦头烂额尝试了apt-get install -f、手动指定版本、添加PPA源等多种方法都无效后我几乎要放弃了。直到我重新想起了aptitude这个工具。aptitude和apt-get一样是Debian/Ubuntu下的包管理工具但它有一个杀手级特性更智能的依赖关系求解器。apt-get在遇到无法解决的依赖冲突时通常会直接摆烂告诉你“不行”。而aptitude会尝试提供几种不同的解决方案让你选择比如“卸载某个冲突的包”、“降级某个包”、“保持当前状态”等。这就好比你去修一个复杂机器apt-get告诉你“零件A和零件B不匹配我修不了”。而aptitude会说“伙计我这里有三个方案1. 换个型号的零件A2. 把旁边那个旧的零件C也换掉3. 稍微调整一下机器结构。你选哪个” 灵活性高下立判。所以处理Open3D这种依赖复杂的库aptitude是我们的首选武器。3.2 使用Aptitude安装关键依赖首先我们需要安装aptitude本身sudo apt install aptitude安装好后我们不需要再运行那个可能引发全局依赖灾难的install_deps_ubuntu.sh脚本了。相反我们精准打击只安装Open3D编译最核心的几个图形和系统开发包。根据我的经验下面这几个是必须的也是冲突的高发区sudo aptitude install xorg-dev libosmesa6-dev libsdl2-dev libudev-dev运行这条命令后aptitude很可能会停下来给你呈现一个交互界面。它会告诉你当前依赖冲突的情况并给出几个带编号的解决方案。比如方案1: 不安装xxx 降级yyy。方案2: 安装xxx 但需要卸载zzz。方案3: 保持当前状态什么都不做这通常不可取。这里需要你仔细看一下它给出的方案描述。通常我们会选择一个能安装所有我们要求的包并且对系统现有包改动最小的方案。你可以通过按方案对应的数字键比如按1来选择。如果第一个方案看起来可行比如只是降级一两个不重要的库就选它。如果它提议卸载一些你确定系统不需要的包也可以接受。多试几次aptitude会不断计算新的方案。我的经验是最终总能找到一个可行的方案成功安装上所有四个包。这个过程可能需要一点耐心和判断但比起无头苍蝇一样乱撞效率高太多了。4. 灵活配置CMake避开Python与编译选项的坑4.1 创建构建目录与基础CMake命令依赖问题解决后我们就可以进入编译构建环节了。首先在Open3D源码根目录下创建一个独立的build目录并进入。这属于CMake的标准操作保持源码树干净。mkdir build cd build接下来就是最关键的cmake配置命令了。Open3D的CMake选项非常多我们不需要全部开启。这里给出一份我实测稳定、功能齐全的配置cmake -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/usr/local/open3d \ -DBUILD_SHARED_LIBSON \ -DBUILD_GUION \ -DENABLE_HEADLESS_RENDERINGON \ -DBUILD_WEBRTCOFF \ -DBUILD_EXAMPLESON \ ..我来解释一下这几个关键选项-DCMAKE_BUILD_TYPERelease编译发布版本优化程度高运行时速度快。如果你要做调试可以换成Debug但编译出的库会很大。-DCMAKE_INSTALL_PREFIX/usr/local/open3d指定安装路径。编译安装后头文件和库文件都会放在这个目录下。你可以改成自己喜欢的路径。-DBUILD_SHARED_LIBSON编译生成动态链接库.so文件。这样你的多个程序可以共享同一个库节省空间。如果希望静态链接可以设为OFF。-DBUILD_GUION启用图形用户界面支持。如果你做的项目需要窗口显示点云或模型这个必须打开。-DENABLE_HEADLESS_RENDERINGON启用无头渲染。这个对于在服务器没有显示器上运行Open3D进行离线渲染或处理非常有用。-DBUILD_EXAMPLESON编译示例程序。强烈建议打开编译成功后在bin目录下会有很多可执行示例是学习和测试的绝佳材料。4.2 Python绑定问题的处理技巧运行上面的cmake命令后你可能会遇到一个常见错误找不到合适的Python解释器或库。Open3D默认会尝试构建Python绑定即open3d的Python包。如果你的系统里有多个Python版本比如系统自带的Python3.8和你自己安装的Python3.10或者Python开发库没装就会报错。有两种思路解决根据你的需求选择彻底禁用Python绑定如果你只用C API完全不需要Python功能这是最干净利落的方法。在CMake命令中增加一个选项即可-DBUILD_PYTHON_MODULEOFF加上这个选项后CMake就不会去查找任何Python相关的东西了一劳永逸。明确指定Python路径如果你需要Python绑定或者未来可能需要那就需要帮CMake找到正确的Python。首先确保安装了对应版本的开发包比如你需要Python3.8sudo apt install python3.8-dev然后在CMake命令中明确指定解释器路径用which python3.8命令可以查到这个路径-DPython3_EXECUTABLE/usr/bin/python3.8配置成功后终端会输出“-- Configuring done”和“-- Generating done”。你可能会看到一些警告比如“Manually-specified variables were not used by the project”列出了一些我们设置了但项目没用的变量像原始文章里的BUILD_EIGEN3等。这完全不用担心只是说明Open3D内部已经默认处理了这些依赖或者这些选项的名字已经更新了忽略即可。5. 编译、安装与验证测试5.1 利用多核加速编译配置完成激动人心的编译阶段开始。Open3D代码量不小编译比较耗时。为了充分利用你的CPU强烈建议使用-j参数进行并行编译。后面的数字代表同时使用的线程数通常设置为CPU核心数的1到2倍。如果你不清楚自己CPU的核心数可以用nproc命令查看。我一般用-j8。make -j8这个过程可能会持续十几分钟到半小时泡杯茶休息一下。如果编译中途报错停止最常见的还是缺少某个特定的开发库。仔细看错误信息它通常会告诉你缺少哪个.h头文件。你可以根据头文件名去搜索对应的Ubuntu包然后用apt安装。例如错误提到GL/gl.h找不到那就安装libgl1-mesa-dev。记住开发库的包名通常以-dev结尾。5.2 安装与系统环境配置编译成功后就可以安装了。这会把编译好的库文件、头文件等复制到我们之前用-DCMAKE_INSTALL_PREFIX指定的路径比如/usr/local/open3d。sudo make install安装完成后为了让系统能找到我们新安装的Open3D库需要更新一下动态链接器的缓存。sudo ldconfig5.3 运行测试验证安装成果现在是检验成果的时候了。我们不去写复杂的代码直接用编译好的示例程序来测试。进入build/bin目录你会发现很多可执行文件比如Visualizer、PointCloud等。我们挑一个最直观的图形界面示例来跑cd bin ./Visualizer如果一切顺利应该会弹出一个Open3D的显示窗口。你可以用鼠标拖拽旋转视角这说明图形渲染部分工作正常。你也可以运行一些点云处理的例子比如./PointCloud。如果这些示例程序都能正常运行没有报链接错误或段错误那么恭喜你Open3D的C开发环境已经成功搭建在你的Ubuntu 20.04系统上了最后在你自己的CMake项目中想要使用Open3D只需要在项目的CMakeLists.txt里添加类似下面的内容find_package(Open3D REQUIRED) include_directories(${Open3D_INCLUDE_DIRS}) target_link_libraries(你的目标程序 ${Open3D_LIBRARIES})记得设置CMAKE_PREFIX_PATH让你的项目知道去哪找Open3D。环境搭建本身是个体力活但也是后续所有精彩工作的基础。磨刀不误砍柴工希望这篇详细的记录能帮你把这把“刀”磨得又快又好。