ubuntu无法添加PPA的解决办法;TBB安装问题。Gcc安装问题

首先阐述一下过程:为了安装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类。

附录:

Ubuntu 安装 tbb 步骤详解_ubuntu tbb-CSDN博客

相关推荐
雯宝4 小时前
mnt_init 函数
linux
律宏阔10 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔10 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴10 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千11 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei3711 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei3711 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei3711 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
judezh11 小时前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker
GeW11 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux