作为阶段性学习记录,配置环境太累了,总会有各种意外的问题影响学习进度,之后要探索一个能兼容很多框架的环境,立个flag。总之踩过的坑不能再踩一遍,珍惜时间
1.兼容c++17,安装gcc-9 g++-9
⽤到c++17的新特性以及TBB库进⾏并发加速,因此需要适配gcc编译器,我安装的是9,也可以gcc-11&g++-11,没试过,不知会不会有意外错误,兼容c++各个标准的GCC编译器情况。先安装gcc-9 g++-9:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt-get install gcc-9
sudo apt-get install g++-9
后两句可能会报错,如果同时存在好几个版本gcc,问题就来了,默认用哪个,所以得设置一下,
# 实现版本切换
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++
# 命令最后的10是优先级,如果使⽤auto选择模式,系统将默认使⽤优先级⾼的,
# 如果检查到有多个版本gcc,需要给要用的版本分配最高优先级数字
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 10
# 切换版本
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
# 检查版本
gcc -v
g++ -v
2. TBB(oneTBB)
这里参考linux tbb 安装_Ubuntu18.04 GCC9 安装_天街踏尽公卿骨的博客-CSDN博客
下载tbb,并cd 到目录
wget https://github.com/intel/tbb/archive/2019_U8.tar.gz
tar zxvf 2019_U8.tar.gz
rm 2019_U8.tar.gz
cd tbb-2019_U8
- 编辑linux.gcc-9.inc
cp build/linux.gcc.inc build/linux.gcc-9.inc
# 使用vscode 编辑文件
code -n build/linux.gcc-9.inc
# 把大约是15,16 行的CPLUS ?= g++ CONLY ?= gcc修改为下面语句,然后保存
CPLUS ?= g++-9
CONLY ?= gcc-9
- 编辑tbb
make compiler=gcc-9 stdver=c++17 tbb_build_prefix=my_tbb_build
- 安装tbb
sudo mkdir /usr/local/tbb-2019_U8
sudo cp -r include /usr/local/tbb-2019_U8/include
sudo ln -s /usr/local/tbb-2019_U8/include/tbb /usr/local/include/tbb
sudo cp -r build/my_tbb_build_release /usr/local/tbb-2019_U8/lib
sudo ln -s /usr/local/tbb-2019_U8/lib/libtbb.so.2 /usr/local/lib/libtbb.so
sudo ln -s /usr/local/tbb-2019_U8/lib/libtbbmalloc.so.2 /usr/local/lib/libtbbmalloc.so
sudo ln -s /usr/local/tbb-2019_U8/lib/libtbbmalloc_proxy.so.2 /usr/local/lib/libtbbmalloc_proxy.so
echo 'export LD_LIBRARY_PATH=/usr/local/tbb-2019_U8/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc # 严格按此敲,没问题
3. Pangolin安装
使⽤Pangolin进⾏可视化,⽽不是ROS中的rviz,这里和orbslam2使用的0.5版本不同,所以0.5不兼容,这里是1.0版
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j
sudo make install
sudo ldconfig # 执⾏⼀下,不然有error while loading shared libraries: libpango_windowing.so
4. G2O 安装
编译g2o时可以不⽤新建 build ,直接 cmake . ,再 make -j 也可以
git clone https://github.com/gaoxiang12/slam_in_autonomous_driving
# ⾸先编译g2o
cd slam_in_autonomous_driving/thirdparty/gªo/
mkdir build
cd build
cmake ..
make -j8
5. ROS安装
本课程主要使⽤ROS来解析bag数据集,安装请参考ROS官⽹:
鱼香ROS一键安装,很贴心 一键安装
一行代码就够了
wget http://fishros.com/install -O fishros && . fishros
6. 其他一些库
挨个试一下,看看哪个没装上呢
sudo apt-get install ros-melodic-pcl-ros ros-melodic-velodyne-msgs libopencv-dev libgoogle-glogdev libeigen«-dev libsuitesparse-dev libpcl-dev libyaml-cpp-dev libgtest-dev
值得思考的是这里的glog 和 googletest?之后还要重装
7. 先安装Gflags,再安装glog、googletest(2-5步没有先后顺序)
gfags 安装参考了gflags&glog卸载与安装 这里要注意的是cmake .. 命令之后需要加的参数:-DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC .. 这会在之后程序链接 libglog.so.x. 的时候会避坑,至少我避免了这个再次报错
1. 如果要卸载:
# 1. glog
sudo apt-get remove sudo apt-get remove libgoogle-glog-dev
# 2. gflags
sudo apt-get remove libgflags-dev
2.安装gflags
这里要注意cmake .. 之后的配置参数 没有这些会造成gflags或者glog动态库与静态库链接混乱
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build && cd build
cmake .. -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC ..
make -j4
sudo make install
3. glog 安装参考了linux 下glog的安装
git clone https://github.com/google/glog //or git clone https://gitee.com/boxingcao/glog.git
sudo apt-get install autoconf automake libtool
cd glog
mkdir build
cd build
cmake ..
make -j8
sudo make install
sudo ldconfig
4. googlegtest
源码安装最新的gtest,因为不安装最新的可能会在编译工程代码时报错,ubuntu 18.04正常 sudo apt-get install libgtest-dev 好像也会出现这个问题,猜测是版本太低的原因
git clone https://github.com/google/googletest
cd googlegtest
mkdir build
cd build
cmake ..
make -j
sudo make install
安装完先别急着按配置文档修改cmakelists.txt文件,先重新编译一下(删除build在新建编译)
有问题再改cmakelists.txt
⬇原因在这:2023.05.17更新:有同学遇到了上述操作完成后。开始编译工程代码,进行cmake .. 操作后就出现报错的情况:
我当时遇到的就是这种,所以先不要加命名空间GTest:: 和 TBB:: ,先编译试试,具体原因为何不改就能过了?有知道的欢迎留言评论,一起学习进步哈
8. 最后编译框架
cd ~/ //进入代码框架文件夹
mkdir build
cd build
cmake ..
make -j8
/*运行完后会在主文件夹内生成 bin/文件夹,即各个子程序可执行文件存放文件夹 */
cd ../
./bin/xxxx
这里尽量不要用make -j 除非对内存很自信,否则,哼哼,爆内存卡死,你只能强制关机重启,最好用make -jx(x <= 2 * 核数)小技巧,怎么查核数
总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看cpu型号
cat /proc/cpuinfo | grep 'model name' |uniq
查看核数,自己数 。 2023.05.17更新:也可以用 make -j$(nproc)自动判断最大能用的线程
grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}'
参考:
[2] linux tbb 安装_Ubuntu18.04 GCC9 安装_天街踏尽公卿骨的博客-CSDN博客
[3] ubuntu20.04一键安装VScode搭建ROS编程环境_鱼香ros一键安装_啥都学点的博客-CSDN博客
[4] melodic/Installation/Ubuntu - ROS Wiki
[5] 【ubuntu】——gflags&glog卸载与安装_卸载glog_农夫山泉2号的博客-CSDN博客
[6] make报错:relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5‘_RuiH.AI的博客-CSDN博客