说在前面
- 根据自己Ubuntu版本,选择相应的ns3版本
- 比如我是Ubuntu20.04,选择的是ns3 3.30.1,之前选择了ns3 3.26,在进行./build时会发生如下问题
- 参考task in ‘ns3-wifi‘ failed或者‘ns3-network‘ failed错误后更改了下载对象,就这个折腾来回快一天
- 安装ns3的时候,命令全部加sudo
安装参考
- 最初参考的是这篇Ubuntu下的NS3安装与入门,因为前面说的那个报错解决不了,最后选择了参考官方说明文档安装
- 官方说明文档
安装说明
- 官方说明文档前面都是废话,从第三部分开始有用,但是也包含很多废话
首先安装依赖,依赖网址,可以从官方说明文档的这个位置找到这个网址
- 在依赖网址的下图的位置开始才是Ubuntu系列的安装方法
- 他里面有说明哪些版本的Ubuntu分别需要安装什么东西,看仔细一些,当然如果偷懒,也可以直接全下,但记得下载全部要sudo
- 我的依赖安装时,
apt install python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev ipython
这个依赖是无法安装的,提示英文版“无法定位本地可用包”,因为这个是在下载可视化软件,因此使用NetAnim代替 - 依赖都安装完以后不要点击jump to installation,也不要去做依赖网址里面的installation部分的内容,这时候要回到官方说明文档
回到官方说明文档之后,直接快进到3.2.1,只做3.2.1
- 图中第一块指令在创建一个叫workspace的文件夹,然后进入文件夹,然后在文件夹里面wget下载ns3相应版本的压缩包,然后解压
- 图中第二块指令要先进入 ns-allinone-3.xx 文件夹,才用ls查看这个文件里面有什么,可以比对一下,基本是没有问题
- 除了官方说明文档里面的wget下载方式,也可以直接到ns3 download,点击黄色的ns-allinone-3.30.1就可以下载压缩包,然后跟官方说明文档里面一样解压操作,ls就可以了。
编译ns3,直接继续快进到3.3,只做3.3.1
- 注意:他这个
./build.py --enable-examples --enable-tests
的两个--以及后面的内容也要复制到终端执行 - 继续快进到3.3.3
- 执行
./waf clean
和./waf configure --build-profile=optimized --enable-examples --enable-tests
两条指令,结果可以和官方说明文档里面给出的比对一下,是不是正确安装了。 - 这一步,看到他的sorry了吗?我承认我一开始没看到。
- 这个是把waf清空,再编译一遍,编译的这个过程要等比较久。
- 看到sorry的朋友,执行完
./waf clean
和./waf configure --build-profile=optimized --enable-examples --enable-tests
以后,3.3.3剩下内容不用做了,可以继续快进到3.4
测试
- 执行
./test.py -c core
,然后结果和官方说明文档里面给出的比对一下,是不是正确。
样例
- 比对完就可以到3.5了
- 看见Congratulations了吗?胜利在前方!
- 执行
./waf --run hello-simulator
如果出现Hello Simulator,那么Congratulations! - 如果没有看到,官方说明文档也有给出解决方案,即
- 跑完这俩,再跑一次
./waf --run hello-simulator
就有了
总结
- 来来回回折腾一天,根本原因是ns3版本和Ubuntu版本不匹配,这是万万没想到的,这个过程因为误会了./build出不来结果的原因,而学到了一些其他知识:
- Linux cannot remove ‘XXX‘: Is a directory 解决办法,我是用了rm -rf temp这种类型
- 如何在Ubuntu中创建文档,我是用了touch
- Ubuntu安装gcc3.4并添加到备选项里,Ubuntu 20.04(64位)如何配置gcc-3.4用于编译linux-0.11,这是当时以为./build出不来是因为gcc等级太高,就要给他降级而下的gcc3.4和g++3.4,一般第一个教程就可以解决了,一般用不上第二个。
- gcc、g++版本降级
- apt-get update ,upgarde 和dist-upgrade 的区别
- 出现og.h:323:44: error: ambiguous overload for ‘operator<<’ (operand types are ‘ns3::ParameterLogger’ and ‘ns3::FatalImpl::{anonymous}::destructor*’)报错,考虑用python2来编译
- 以及之前发的博客的那一部分