首先阐述一下过程:为了安装IG_lio,这个包在ubuntu20.04下,最容易安装,一把过。但是如果安装到18.04下,tbb是个坑。为了装tbb,要先安装gcc和g++
然后安装gcc碰到了ppa的坑。
Ubuntu18.04 安装 tbb 走过的坑。Ubuntu下安装slam的一些算法,但是依赖与tbb,为了安装tbb,需要依赖gcc-9。为了安装gcc,走了以下的坑。
安装gcc-9和g++-9需要依赖ppa
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-9
sudo apt-get install g++-9
第一步会报错:
我试过好多方法。都不管用,包括但不限于:
sudo apt-get install --reinstall ca-certificates
sudo -E add-apt-repository -y ppa:ubuntu-toolchain-r/test
以及,下面这个方案也不行。
Linux ubuntu修改软件源为国内源;解决apt install、PPA源太慢;_ubuntu ppa 国内源-CSDN博客
PPA源可以理解成第三方源。有些软件在ubuntu官方软件源是没有的,但在PPA源里就可能有。但PPA的默认源也是国外的,访问很慢。
cd /etc/apt/sources.list.d
可以看到ppa源列表文件(以.list结尾的),编辑,将其中的http://ppa.launchpad.net替换为
http://launchpad.proxy.ustclug.org
最后的解决方案:
把网络切换成手机网络。手机开个热点。搞定。
TBB安装参照
Ubuntu 安装 tbb 步骤详解_ubuntu tbb-CSDN博客
解决 "编译需要TBBConfig.cmake,但TBB 2020及older版本不生成.cmake文件"的问题-CSDN博客
Ubuntu18.04下安装与切换多个gcc和g++,以及gcc g++ 9.1.0的安装_ubunutu 18.04 切换 g++9-CSDN博客
// 查看所有gcc版本
ls /usr/bin/gcc*
查看当前gcc版本
which gcc
设置优先级
sudo update-alternatives --install /usr/local/bin/gcc gcc /usr/bin/gcc-9 10
sudo update-alternatives --config gcc
sudo update-alternatives --install /usr/local/bin/g++ g++ /usr/bin/g++-9 10
sudo update-alternatives --config g++
后面几行解决:
fatal error: execution: 没有那个文件或目录
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-9//注意gcc和g++都是9.0以上的版本 进行编译
sudo apt install g++-9 //github上缺少这一步,一直报错,用g++ --version 查看才知道需要安装 g++-9
cd /usr/bin
sudo rm gcc g++
sudo ln -s gcc-9 gcc
sudo ln -s g++-9 g++
gcc -v
g++ -v
如何查看TBB是否安装成功:
cd ../examples/pipeline/square
make
查看结果
g++ -O2 -DNDEBUG -o square square.cpp gen_input.cpp -ltbb -lrt -std=c++11
./square 0 input.txt output.txt
serial run time = 0.0591629
parallel run time = 0.0123664
elapsed time : 0.089502 seconds
卸载tbb
查看版本:发现是2017版。
dpkg -l | grep libtbb
ii libtbb2:amd64 2017~U7-8 amd64 parallelism library for C++ - runtime files
安装:
Ubuntu 安装旧版tbb(2019_U5)踩坑流程_tbb版本-CSDN博客
注意把2019换成你需要的版本。
下面这个不要用呀。
sudo apt install libtbb-dev
卸载:
sudo apt-get remove libtbb-dev
sudo apt-get remove libtbb2:amd64
卸载之后,重新安装高一点的版本。
官网下载最新版本:然后
mkdir build
cd build
cmake ..
make all
sudo make install
// 测试
cd ../example/test_all/fibonacci
cmake .
make
./fabonacci
Ubuntu 安装 tbb 步骤详解_ubuntu tbb-CSDN博客
也曾按照这个安装,最终我已经分不清,我到底安装的的哪个版本。
error: 'task' is not a member of 'tbb';
dpcpp my_app.cpp -DPSTL_USE_PARALLEL_POLICIES=0 # for libstdc++ 9
dpcpp my_app.cpp -D_GLIBCXX_USE_TBB_PAR_BACKEND=0 # for libstdc++ 10
'tbb::task' has not been declared - Intel Community
解决方法一:亲测有效。
#define PSTL_USE_PARALLEL_POLICIES 0
#define _GLIBCXX_USE_TBB_PAR_BACKEND 0
After exchanging <oneapi/dpl/execution > and *<oneapi/dpl/algorithm>,*everything is ok.
我没有尝试,大家可以试试,把低版本比如18.04默认的是tbb2017版本中的这俩文件替换一下。
解决方法二:亲测有效:
我参照:oneTBB-2021.11.0版本中,有example路径下test_all中fibonacci中的写法。
首先
mkdir build
cd build
cmake ..
make
./fibonacci
// 发现可以跑通。说明我们tbb安装成功了。
我们参照fibonacci中的写法。修改我们自己源码中tbb的调用。
#include "oneapi/tbb/tick_count.h"
#include "oneapi/tbb/blocked_range.h"
#include "oneapi/tbb/concurrent_vector.h"
#include "oneapi/tbb/concurrent_queue.h"
#include "oneapi/tbb/concurrent_hash_map.h"
#include "oneapi/tbb/parallel_for.h"
#include "oneapi/tbb/parallel_reduce.h"
#include "oneapi/tbb/parallel_scan.h"
#include "oneapi/tbb/parallel_pipeline.h"
#include "oneapi/tbb/spin_mutex.h"
#include "oneapi/tbb/queuing_mutex.h"
#include "oneapi/tbb/global_control.h"
将我们ig_lio中用到的tbb的代码:tbb加上oneapi。亲测可用。
// #include <tbb/parallel_for.h>
// #include <tbb/parallel_reduce.h>
#include "oneapi/tbb/parallel_for.h"
#include "oneapi/tbb/parallel_reduce.h"
测试我们去跑oneTBB-2020_U3版本中的example中test_all中的fibonacci中发现,
他的写法还是原来老的写法,然后再看2020版本中Fibonacci.cpp,对于类的定义也不一样了,在里面定义了个task的类。这个类在新版中没有。两个版本的文件名称都不不一样。
我查阅新版本,并未找到这个task类。
附录: