保举Linux其他软件安装
Ubuntu/Debian小白从零开始设置深度学习环境和各种软件库(显卡驱动、CUDA、CUDNN、Pytorch、OpenCv、PCL、Cmake …)【持续维护】
一、apt 软件包安装(pcl1.10.0保举)
使用apt安装方式,比力简单,但是版本不是最新的,一样平常Ubuntu20.04对应PCL1.10.0
详细检察下系统软件包里面opencv的版本
- sudo apt update
- sudo apt upgrade
- # 安装依赖
- sudo apt-get install build-essential libboost-all-dev libeigen3-dev libflann-dev libvtk7-devlibavformat-dev libswscale-dev
- # 直接一键安装
- sudo apt install libpcl-dev
- sudo apt install libpcl-dev pcl-tools
复制代码 如果没有版本要求限制,此种安装方法比力快捷方便。
二、源码安装(pcl高版本)
2.1 安装依赖环境
如果以下依赖还不行,那安装过程中,缺少什么安装什么;PCL依赖环境比力多,不要急,我们一个个来。
2.1.1安装基本依赖
- sudo apt update
- sudo apt upgrade
- sudo apt-get install git build-essential linux-libc-dev cmake cmake-gui
- sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev libeigen3-dev libboost-all-dev
- sudo apt-get install libqhull* libgtest-dev freeglut3-dev pkg-config libxmu-dev libxi-dev mono-complete openjdk-8-jdk openjdk-8-jre
- # flann ubuntu20.4对应1.9
- sudo apt-get install libopenni-dev libopenni2-dev libflann1.9 libflann-dev
- #安装qt5
- sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtcreator
- sudo apt install qt5-default
- sudo apt-get install qttools5-dev
- sudo apt install libqt5x11extras5-dev
复制代码 2.1.2安装metslib
- wget https://www.coin-or.org/download/source/metslib/metslib-0.5.3.tgz
- tar xzvf metslib-0.5.3.tgz
- cd metslib-0.5.3
- ./configure
- make -j`nproc`
- sudo make install
复制代码 2.1.2安装VTK
用来可视化终端
- #安装x11
- sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
- #安装opengl
- sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
- #安装libglut-dev 此步不行的话 需要手动源码安装VTK
- sudo apt-get install freeglut3-dev
- sudo apt-get install libvtk7.1-qt libvtk7.1 libvtk7-qt-dev
复制代码 VTK官网:https://vtk.org/download/ 下载VTK-7.1.1.tar.g版本(本人看来很多帖子都是建议装7.1版本,暂不清楚缘故起因)
- tar -xzvf vtk-7.1.1.tar.gz
- cd vtk-7.1.1
- mkdir build && cd build
- #先配置下qt的版本改成5 再依次点击Configure Generate
- cmake-gui
- cmake ..
- make -j4
- sudo make install
复制代码 注意 Qt5UiPlugin_DIR的路径大概需要手动设置
2.2 编译安装PCL
pcl链接 Github 官网 目前最新版本是pcl-1.15.0,这里我们下载pcl-1.13.1
- cd pcl-pcl-1.13.1
- mkdir build && cd build
- cmake .. \
- -DCMAKE_BUILD_TYPE=None \
- -DCMAKE_INSTALL_PREFIX=/usr/local \
- -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu \
- -DFREETYPE_LIBRARY=/usr/lib/x86_64-linux-gnu/libfreetype.so \
- -DBUILD_GPU=ON \
- -DBUILD_apps=ON \
- -DBUILD_simulation=ON \
- -DBUILD_examples=ON
- # 一般这步容易出错
- make -j6
- #make install指令pcl项目文件 转到默认的路径/usr/include 下
- sudo make install
复制代码 cmake … 成功界面
make -j6 成功界面
安装成功完后,会在usr/local/include/文件中,出现pcl-1.13文件,包含头文件。
2.3 报错办理
问题一: make[2]: *** 没有规则可制作目标“/usr/lib/x86_64-linux-gnu/libpcl_apps.so
缘故起因: 多个pcl版本安装冲突导致,删除没有删除干净,定位到pcl库文件已经大部分链接中断
办理办法: 一定要卸载干净,重新安装
问题二: anaconda3/lib/libQt5X11Extras.so.5: undefined reference to `qt_version_tag@Qt_5.15’ anaconda 与系统默认的冲突
缘故起因: 既然是qt_version_tag的问题,说明是qmake的版本不兼容导致,即当前QT使用的qmake和系统现实指定的qmake版本不一致。检察系统默认的qmake版本,一样平常来说是系统与anaconda中的lib版本冲突。以后遇见 xxx.so: undefined reference to xxx 其实问题本质是anaconda3与系统默认路径库文件版本冲突缘故起因
- qmake -version
- dpkg -l | grep qt5
复制代码
办理方法一: 退出当前环境
办理方法二: 在使用编译的CMakeLists.txt文件里面添加一句话,让其指定搜索路径【保举】
- SET(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")
复制代码 添加这句话,其他的库文件也会在系统目录里面探求;记得删除build里面所有建的环境,再次编译通过。
办理方法三: 把有关anaconda3的设置环境注释掉
- gedit ~/.bashrc
- # 注释以下内容
- # __conda_setup="$('/home/xjc/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
- # if [ $? -eq 0 ]; then
- # eval "$__conda_setup"
- # else
- # if [ -f "/home/xjc/anaconda3/etc/profile.d/conda.sh" ]; then
- # . "/home/xjc/anaconda3/etc/profile.d/conda.sh"
- # else
- # export PATH="/home/xjc/anaconda3/bin:$PATH"
- # fi
- # fi
- # unset __conda_setup
- source ~/.bashrc
复制代码 安装完后,再把注释改回来
办理方法四: 在CMakeLists.txt设置单独版本查找路径
- find_package(Qt5 5.15 REQUIRED)
复制代码 办理方法五: 重新把库文件链接到指定需要的文件
- sudo apt-get install locate
- # 使用命令ldd定位libwayland-client.so.0当中,所依赖的ffi库
- $ ldd /lib/x86_64-linux-gnu/libwayland-client.so.0 | grep ffi
复制代码
检察下anaconda3/lib/和 /usr/lib/x86_64-linux-gnu/ 对应得库版本是否一致 ,如果不一样则修改
- locate libffi.so.7
- # 查看系统的libffi
- ll /lib/x86_64-linux-gnu/ | grep ffi
- # 查看Anaconda的libffi
- ll ~/anaconda3/lib/ | grep ffi
复制代码
我们看到两个库不一样,一个是7.1.0,一个是8.1.2 ,因此把anaconda下的libffi.so.7指向系统的7.1.0
- cd ~/anaconda3/lib/lib
- sudo rm libffi.so.7
- sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7
- #再次查看
- ll ~/anaconda3/lib/ | grep ffi
复制代码
问题三: Sub-process /usr/bin/dpkg returned an error code (1) 修复安装包
- sudo apt-get update
- sudo apt-get upgrade
- # 尝试修复损坏的软件包
- sudo apt-get install -f
- sudo dpkg --configure -a
复制代码 2.4 添加环境变量
- # 源码编译时 配置环境变量
- export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
复制代码 使用nano文本编辑器打开.bashrc是隐藏的环境设置文件
- nano ~/.bashrc
- #滑动到末端,添加下面三段文本
- export PCL_DIR=/usr/local/lib/pcl
- export LD_LIBRARY_PATH=$PCL_DIR/lib
- export PKG_CONFIG_PATH=$PCL_DIR/lib/pkgconfig
- # 添加完后 先Ctrl+O保存,按Enter确定,再Ctrl+X退出nano编辑器
- # 更新环境变量配置文件
- source ~/.bashrc
复制代码 2.5 版本验证
- # 这里的1.x应替换为你安装的PCL版本号,例如1.10或1.12等
- pkg-config --cflags pcl_common-1.x
- apt-cache show libpcl-dev
复制代码 如果输出了一些编译标志,说明PCL安装成功。
2.6 卸载pcl
- # apt 安装方式卸载
- sudo apt-get remove libpcl-dev
- sudo apt-get purge libpcl-dev
复制代码- # 源码手动安装方式卸载 大致原理是搜索pcl字眼全部删除
- sudo rm -r build #把pcl1.xx的相应的文件夹删掉即可
- sudo rm -r /usr/include/pcl-1.13.1 /usr/share/pcl /usr/bin/pcl* /usr/lib/libpcl*
- sudo rm -r /usr/libx86_64-linux-gnu/libpcl*
- sudo rm -r /usr/lib/x86_64-linux-gnu/cmake/pcl
复制代码 三、设置c++/pcl开发环境
使用CMakeLists.txt设置pcl。创建一个文件夹,文件夹下包含:build文件夹、pcl_demo.cpp程序、CMakeLists.txt。
- cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
- project(pcl_demo)
- set(CMAKE_CXX_STANDARD 14) # 设置C++标准
- # 查找PCL包
- find_package(PCL REQUIRED)
- include_directories(${PCL_INCLUDE_DIRS}) #PCL_INCLUDE_DIRS是系统自动命名,不要更改,添加PCL的头文件路径
- link_directories(${PCL_LIBRARY_DIRS}) # 添加PCL的库路径
- add_definitions(${PCL_DEFINITIONS}) # 添加编译选项 可选
- # 添加可执行文件
- add_executable(pcl_demo pcl_demo.cpp)
- # 链接PCL库
- target_link_libraries(pcl_demo ${PCL_LIBRARIES})
复制代码 pcl_demo.cpp程序,在vscode里面,#include <pcl/xxx.h>有波浪线告诫 是正常征象,无需紧张
- #include <iostream>
- #include <pcl/pcl_config.h>
- #include <pcl/point_types.h>
- #include <pcl/point_cloud.h>
- #include <iostream>
- #include <pcl/common/common_headers.h>
- #include <pcl/io/pcd_io.h>
- #include <pcl/visualization/pcl_visualizer.h>
- #include <pcl/visualization/cloud_viewer.h>
- #include <pcl/console/parse.h>
- int main() {
- std::cout << "PCL version: " << PCL_VERSION_PRETTY << std::endl;
- // 创建一个简单的点云对象来测试基本功能
- pcl::PointCloud<pcl::PointXYZ> cloud;
- std::cout << "Test PCL !" << std::endl;
- pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);
- uint8_t r(255), g(15), b(15);
- for (float z(-1.0); z <= 1.0; z += 0.05) {
- for (float angle(0.0); angle <= 360.0; angle += 5.0) {
- pcl::PointXYZRGB point;
- point.x = 0.5 * cosf (pcl::deg2rad(angle));
- point.y = sinf (pcl::deg2rad(angle));
- point.z = z;
- uint32_t rgb = (static_cast<uint32_t>(r) << 16 | static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
- point.rgb = *reinterpret_cast<float*>(&rgb);
- point_cloud_ptr->points.push_back (point);
- }
- if (z < 0.0) {
- r -= 12;
- g += 12;
- }
- else {
- g -= 12;
- b += 12;
- }
- }
- point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
- point_cloud_ptr->height = 1;
-
- pcl::visualization::CloudViewer viewer ("test");
- viewer.showCloud(point_cloud_ptr);
- while (!viewer.wasStopped()){ };
-
- // 如果代码执行到这里没有错误,说明PCL基本功能正常
- std::cout << "PCL basic functionality test passed." << std::endl;
- return 0;
- }
复制代码- cd build
- cmake ..
- make
- ./pcl_demo
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |