安装事项
- 流程就按照官网给的装机流程一步一步做
需要注意的点
- linux的依赖关系搞起来很烦。根据ns3的版本需要安装不同版本的依赖库。太低版本的不行,太高版本的也不行。有的你按照官网流程安装会发现系统提示你根本没有这个安装包。
- 我选用的是ubuntu 20.04,ns是3.30的,安装时有几个包是远远超前于安装教程的。注意不要选的太新。有几个包如果直接用·apt-get·安装会安装最新的版本,然后你就发现其他老的包装不上了。所以安装的时候要多按几下自动补全(tab键),看看都有什么版本的可以安装。
- 有些包安装教程上直接给的是具体的版本号,可能已经太老了,你安装的时候发现系统提示你没有这个包,这时就必须安装稍微新一点的。所以特别注意依赖包中的数字,它代表着版本号。灵活一点,不一定非要跟他一模一样。
- 这个时候是python3和python2的过渡期,ns3.30是使用python3的,这方面出现问题的时候试试是不是版本问题
- 记得换源, 安装教程有一步是使用
pip
安装一个python包cxxflit
(好像是这个), 注意这个pip是python3的,所以正确的应该是pip3 install xxxx
, pip源很慢,记得把pip的源也换了, 然后中科大的源换地址了,用清华的源。 - 安装ns3时给ubuntu的内存分配至少要4GB的内存, 否则你就会发现编译着就不动了,然后ubuntu也很卡。可以用top命令看看内存够不够。因为编译过程有一两个小时左右。硬件不好花费的时间可能更长。
其他的没什么要注意了,linux安装东西很灵活,但也意味着同样的代码可能过一段时间就因为更新而不能重复再用了。这点很关键。
编译和测试waf
使用Python编写ns3脚本的问题
ns3.30可以支持python编写脚本。但不是100%兼容的。使用python编写的需要注意,
- 如果出现
pybindgen in core ... time.clock()
这样的错误是因为python3.8版本已经删除了time.clock()
这个属性,他的功能用time.perf_counter()
替代。解决办法有两个,一个是装Python3.7。另一个是把所有使用time.clock()
的地方替换为time.perf_counter()
,注意更改的地方可能是other.clock() - time.clock()
这样的形式, 注意把两个都改了。总共大概是3个文件,加起来不到10处,也不太麻烦。 - 另一个地方是这样的报错
Nonetype '<' Nonetype
这样的。忘了具体的文字,差不多是这个格式,反正意思是None类型不能和None类型作比较,所以发生了错误。这个也是Python3的新定义。python3明确了不同的类型不能互相比较,比如None不能和int比较, None也不能和None比较。 python2中这是可以的。所以此处还是改源代码。源代码要改的地方好像是在return
的那个位置做了个比较然后返回。往上翻翻能看到他是赋了一个None值,所以把这个return地方的比较改了就行。 怎么改 : 在python2中把None和None和int类型的都比较了,看看比较的逻辑。然后把这个比较逻辑用单行的if-else语句实现, 最后用这句把return里那个比较替换掉就可以了。
能用这个软件的,至少都有编程功底,所以我就不放代码了,因为我忘了文件位置了,总之很简单的if-else逻辑。
运行和配置时的注意问题
按照安装教程安装成功后,应该已经能运行hello-simulator了,python脚本没有什么问题应该也可以了。
- waf的配置方式是, 先运行
./waf 命令
, 然后再运行一次./waf
才会生效 - 如果在运行例子时,发现提示
program not found
,可能原因有两个,一个是没有使能例子,例子默认是关闭的,需要手动开。第二个是程序名的问题, 运行c++程序不要加.cc
后缀,Python程序要加.py
后缀。比如:
./waf --run examples/tutorial/first
./waf --pyrun examples/tutorial/first.py