最近想用下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遇到的问题相关推荐

  1. shell中竖线的作用_如何在 Linux 中安装、配置和使用 Fish Shell?

    每个 Linux 管理员都可能听到过 shell 这个词.你知道什么是 shell 吗? 你知道 shell 在 Linux 中的作用是什么吗? Linux 中有多少个 shell 可用? -- Ma ...

  2. caffe-gpu ubuntu 安装_如何在Linux中安装vnStat和vnStati监视网络流量

    VnStat是针对Linux和BSD的基于控制台的网络流量监视工具设计.它将保留所选网络接口的网络流量日志.为了生成日志,vnStat使用内核提供的信息. 换句话说,它不会嗅探网络流量,并且可以确保系 ...

  3. linux mysql授权外部访问权限,Linux中安装Mysql授权远程访问

    Linux中安装MySQL 因为使用yum安装.安装过程需保证网络通畅 一.安装mysql 1.yum安装mysqlCentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql, ...

  4. ubuntu 安装yum_如何在 Linux 中安装微软的 .NET Core SDK | Linux 中国

    本分步操作指南文章解释了如何在 Linux 中安装 .NET Core SDK 以及如何使用 .NET 开发出第一个应用程序.-- Sk致谢译自 | ostechnix.com 作者 | Sk译者 | ...

  5. linux内核如何安装vim,如何在Linux 中安装和使用 PacVim?

    描述 你好,Vim用户!今天,我偶然发现了一个很酷的程序来提高 Vim 的使用技巧.Vim 是编写和编辑代码的绝佳编辑器.然而,你们中的一些人(包括我)仍在陡峭的学习曲线中挣扎.再也不用了!来看看 P ...

  6. php sftp 删除,Linux中安装,卸载ftp|sftp服务

    今天带来Linux中安装,卸载ftp|sftp服务 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet ...

  7. 如何在Linux中安装和使用Silver Searcher(程序员的代码搜索工具)

    Silver Searcher是一个免费的开源跨平台源代码搜索工具,类似于ack ( 类似于程序员的grep工具 ),但速度更快. 它运行在类Unix系统和Windows操作系统上. 银色搜索者和ac ...

  8. linux中怎么安装ded包_快速提示:如何在Linux中安装.deb和.tar文件 - push博客

    在本快速教程中,我将解释如何使用终端命令在Linux中安装程序.本教程使用LinuxMint 18(肉桂64位),但是下面提供的命令对于其他版本的Linux是通用的,比如Ubuntu.对于那些刚接触l ...

  9. OpenCV在Linux中安装

    OpenCV在Linux中安装 在Linux中安装 快速开始 构建核心模块 用opencv_contrib构建 详细过程 安装编译器和构建工具 下载资源 配置和构建 检查构建结果 安装 在Linux中 ...

最新文章

  1. python转换数据类型(int、float、str、eval、tuple、list、chr、ord、bin、oct、hex)
  2. Linux_Bash常用脚本
  3. C++五子棋(六)——游戏结束
  4. 自由职业者在合作之前要弄懂的15个问题
  5. 0x84bb0001 sqlserver_sqlserver 2000 远程连接 服务器的解决方案
  6. linux 查询oracle情况,在Linux下使用SQLPlus查看Oracle数据库表空间及使用率
  7. java jdk最新版本是多少_Linux下一键安装java-jdk任意版本
  8. 安卓3D游戏-神奇宝贝防御战
  9. 数组深拷贝_JavaScript之深浅拷贝
  10. 01《构建之法》阅读笔记01
  11. python21天打卡Day12--for循环,列表推导式-构建列表
  12. php下载功能的实现,laravel实现下载文件
  13. 2008年南京等5城市将升格直辖市
  14. ST7789-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)
  15. Unity 纹理拆分 Alpha 通道
  16. 所有能反演SIF的卫星以及下载链接
  17. Jenkins构建从github上克隆时,报Host key verification failed.
  18. 调整DOSBOX窗口大小并运行程序
  19. 学习笔记25马氏链模型
  20. C++与QML混合编程

热门文章

  1. 小程序sitemap配置
  2. android中的progressbar,ProgressBar使用详解
  3. 千寻数字藏品系统开发源码分享
  4. 前端不常见25k+面试题(持续更新)
  5. EasyGBS国标流媒体视频平台接入海康、大华、宇视的摄像机、硬盘录像机NVR、国标下级平台的方案
  6. erp二次开发与java web_什么是erp系统的二次开发?
  7. matlab 中 zores,matlab中的zeros函数
  8. 基于布谷鸟搜索混合灰狼优化算法求解单目标优化问题(AGWOCS)
  9. VC6 向 VC9 移植时常见BUG
  10. 哪些条件下HLW8112适用免校表