在Linux中安装P4遇到的问题
最近想用下P4-based software switch,我采用的ubuntu 16.04 LTS,linux内核版本为linux4.18。看的这个教程来:https://blog.csdn.net/qq_34039018/article/details/88843937,这位作者提供的安装过程非常详细,前面都很顺利,但后来还是遇到了些问题,发个帖记录下,给后面遇到同样问题的人提供个方便。
一、遇到的第一个问题出现在安装p4c的过程中,当在"../p4c/build/"的目录下执行"make -j4"时,进度到了[6%]时会遇到如下报错:
In file included from /home/squirrel2/p4/p4c/build/lib/unified_libp4ctoolkit_srcs_1.cpp:2:0:
/home/squirrel2/p4/p4c/lib/backtrace.cpp: In function ‘void std::__throw_system_error(int)’:
/home/squirrel2/p4/p4c/lib/backtrace.cpp:84:31: error: ‘system_error’ is not a member of ‘std’throw backtrace_exception<std::system_error>(error_code(err, generic_category()));^
/home/squirrel2/p4/p4c/lib/backtrace.cpp:84:31: error: ‘system_error’ is not a member of ‘std’
/home/squirrel2/p4/p4c/lib/backtrace.cpp:84:48: error: template argument 1 is invalidthrow backtrace_exception<std::system_error>(error_code(err, generic_category()));^
/home/squirrel2/p4/p4c/lib/backtrace.cpp:84:83: error: ‘generic_category’ was not declared in this scopethrow backtrace_exception<std::system_error>(error_code(err, generic_category()));^
/home/squirrel2/p4/p4c/lib/backtrace.cpp:84:84: error: ‘error_code’ was not declared in this scopethrow backtrace_exception<std::system_error>(error_code(err, generic_category()));^
/home/squirrel2/p4/p4c/lib/backtrace.cpp:85:1: warning: ‘noreturn’ function does return}^
lib/CMakeFiles/p4ctoolkit.dir/build.make:81: recipe for target 'lib/CMakeFiles/p4ctoolkit.dir/unified_libp4ctoolkit_srcs_1.cpp.o' failed
make[2]: *** [lib/CMakeFiles/p4ctoolkit.dir/unified_libp4ctoolkit_srcs_1.cpp.o] Error 1
CMakeFiles/Makefile2:1054: recipe for target 'lib/CMakeFiles/p4ctoolkit.dir/all' failed
make[1]: *** [lib/CMakeFiles/p4ctoolkit.dir/all] Error 2
Makefile:159: recipe for target 'all' failed
make: *** [all] Error 2
因为刚开始觉得git下载的代码肯定没问题,所以一直关注着failed和error前的提示,所以进行了下面的两个尝试:
1. 以为CMake的版本过低,我的是3.5,升级到最新版的以后重新执行还是报这个问题。
2. 以为是我的linux内核版本过低(最开始用的linux 4.4),把内核版本升级到原作者使用的4.18版本以后还是这样。
最后关注上面代码中的提示:"error is not a member of std",然后按照网上搜到的方法:先找到报error的文件"../p4c/lib/backtrace.cpp",然后把"#include <system_error>"加到头文件,重新"make -j4"问题解决。
二、遇到的第二个问题出现在对p4c进行"make check -j4",遇到的问题如下:
1210个tests里面的前50个会failed,开始觉得无法定位到具体的地方,感觉依赖包还有之前的按照步骤都没问题,为什么就这50个错了。经过一番google,在这里找到了日志文件的所在地点,在p4c/build/目录下的"../build/Testing/Temporary/LastTest.log",打开日志文件后发现原来是前50个需要些python扩展包的支持,按照提示用pip3安装后问题解决。
然而有部分可以pass,依旧有部分failed,继续查看提示发现是for循环的使用上出错,在gcc下(int i=0; i<10; i++)这样用会报错,gcc版本大于5.0好像默认的c11,但是因为之前做ns2和ns3实验,我用的gcc和g++都是选择的比较远古的版本。把代码一个个改正显然是不现实的,这里采用的方法是编辑"~/.bashrc"文件,用alias增加这句定义"alias g++='g++ -std=c++11'", "alias gcc='gcc -std=c11'",问题完全解决~。
"
在Linux中安装P4遇到的问题相关推荐
- shell中竖线的作用_如何在 Linux 中安装、配置和使用 Fish Shell?
每个 Linux 管理员都可能听到过 shell 这个词.你知道什么是 shell 吗? 你知道 shell 在 Linux 中的作用是什么吗? Linux 中有多少个 shell 可用? -- Ma ...
- caffe-gpu ubuntu 安装_如何在Linux中安装vnStat和vnStati监视网络流量
VnStat是针对Linux和BSD的基于控制台的网络流量监视工具设计.它将保留所选网络接口的网络流量日志.为了生成日志,vnStat使用内核提供的信息. 换句话说,它不会嗅探网络流量,并且可以确保系 ...
- linux mysql授权外部访问权限,Linux中安装Mysql授权远程访问
Linux中安装MySQL 因为使用yum安装.安装过程需保证网络通畅 一.安装mysql 1.yum安装mysqlCentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql, ...
- ubuntu 安装yum_如何在 Linux 中安装微软的 .NET Core SDK | Linux 中国
本分步操作指南文章解释了如何在 Linux 中安装 .NET Core SDK 以及如何使用 .NET 开发出第一个应用程序.-- Sk致谢译自 | ostechnix.com 作者 | Sk译者 | ...
- linux内核如何安装vim,如何在Linux 中安装和使用 PacVim?
描述 你好,Vim用户!今天,我偶然发现了一个很酷的程序来提高 Vim 的使用技巧.Vim 是编写和编辑代码的绝佳编辑器.然而,你们中的一些人(包括我)仍在陡峭的学习曲线中挣扎.再也不用了!来看看 P ...
- php sftp 删除,Linux中安装,卸载ftp|sftp服务
今天带来Linux中安装,卸载ftp|sftp服务 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet ...
- 如何在Linux中安装和使用Silver Searcher(程序员的代码搜索工具)
Silver Searcher是一个免费的开源跨平台源代码搜索工具,类似于ack ( 类似于程序员的grep工具 ),但速度更快. 它运行在类Unix系统和Windows操作系统上. 银色搜索者和ac ...
- linux中怎么安装ded包_快速提示:如何在Linux中安装.deb和.tar文件 - push博客
在本快速教程中,我将解释如何使用终端命令在Linux中安装程序.本教程使用LinuxMint 18(肉桂64位),但是下面提供的命令对于其他版本的Linux是通用的,比如Ubuntu.对于那些刚接触l ...
- OpenCV在Linux中安装
OpenCV在Linux中安装 在Linux中安装 快速开始 构建核心模块 用opencv_contrib构建 详细过程 安装编译器和构建工具 下载资源 配置和构建 检查构建结果 安装 在Linux中 ...
最新文章
- python转换数据类型(int、float、str、eval、tuple、list、chr、ord、bin、oct、hex)
- Linux_Bash常用脚本
- C++五子棋(六)——游戏结束
- 自由职业者在合作之前要弄懂的15个问题
- 0x84bb0001 sqlserver_sqlserver 2000 远程连接 服务器的解决方案
- linux 查询oracle情况,在Linux下使用SQLPlus查看Oracle数据库表空间及使用率
- java jdk最新版本是多少_Linux下一键安装java-jdk任意版本
- 安卓3D游戏-神奇宝贝防御战
- 数组深拷贝_JavaScript之深浅拷贝
- 01《构建之法》阅读笔记01
- python21天打卡Day12--for循环,列表推导式-构建列表
- php下载功能的实现,laravel实现下载文件
- 2008年南京等5城市将升格直辖市
- ST7789-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)
- Unity 纹理拆分 Alpha 通道
- 所有能反演SIF的卫星以及下载链接
- Jenkins构建从github上克隆时,报Host key verification failed.
- 调整DOSBOX窗口大小并运行程序
- 学习笔记25马氏链模型
- C++与QML混合编程