1.前言
最近在做毕业设计,需要用NS2仿真器,由于手头只有一台macbook pro,因此决定在这个平台下配置这个工具,绝大多数内容都是从前人的帖子和博客里面找到的解决方法,作为一个搬运工,笔者在此将各种信息集合在一起,这样可以方便新人学习,可以少走一点弯路,毕竟自己也是折腾了好多遍的,用这种方式记下来对自己日后复习也是一种帮助。
2.开发环境
(1)Mac OS X 10.11 64位
(2)在终端输入
$ gcc -v查看编译器版本为
Apple LLVM version 7.0.0 (clang-700.1.76)
Target: x86_64-apple-darwin15.0.0
Thread model: posix
注:安装的过程中可能会出现错误,经过多次排查,其实跟编译器本身无关,不需要为此去安装真正的gcc,目前发现的错误没有一个是这个原因造成的。
3.步骤
(1)首先安装xQuartz,这个东西是一个支持的环境,本身的配置跟NS2无关,可以用homebrew来安装,具体如何操作可以自行查找资料,由于时间有点久了,笔者不记得具体过程了,因此就不写这个了。
(2)安装homebrew
以后很多工具都需要用上这个,虽然这个本身也和ns2没有关系,具体安装方式可以参考下面这篇博客,亲测通过:
(3)安装NS2,参考下面一篇博客安装NS2.
a. 安装完之后,在终端输入
$ ns之会进入一个输入的模式,这样就说明了NS2安装成功,在此之前,ns2安装完毕后,终端界面会提示用./validate命令来检测安装是否成功,很多情况下validate都不会成功,因为整个NS2安装文件有很多组件,比如说Xgraph画图工具就没有成功安装,因此validate有相当大几率会失败,但是这个并不影响使用,只要ns2本身能正常工作就够了,不需要去运行validate命令,非常浪费时间。如果在终端输入ns,提示该命令不存在,那么就是路径没有设置正确,只需要在~/.bash_profile文件里加上
export PATH=$PATH:/Users/xunhuang/ns2related/ns-allinone-2.35/bin就行了,如果没有该文件,就创建一个。
b. 测试tcl脚本是否可以正常使用,下面用一个例子来演示。
首先进入
/Users/xxxxx/ns2related/ns-allinone-2.35/ns-2.35/tcl/ex文件目录,查看目录中的文件, 然后找一个后缀名为tcl的文件,比如说
$ ns nam-example.tcl 来执行,执行结果如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/42d6c003711949e6cf438be8f5310952.png)
nam是一个动画仿真器,可以根据tcl文件执行的内容,用某种命令将节点的行为动态显示出来,具体细节此处先忽略,能出现这种界面,就说明nam也能成功运行,说明ns2安装成功。
(4)使NS2可以调试C++代码
到上一步为止,ns2已经可以通过把tcl文件当参数执行ns命令,来实现一些模拟,但是这不是本文的目的,ns2本身仿真在后台是用c++实现的,自身也提供了不少网络协议,比如说tcp和udp等等,当我们需要增加自己的网络模块的时候,之前的方式就完全没有办法了,很多新手,包括自己在内,就不知道应该从何下手了。剩下的步骤,默认读者对ns2的整个结构有一定了解,大概知道是个怎么回事,因为本文的篇幅也不可能介绍那么全面,笔者水平也有限。如果对ns2整个结构还没有入门的话,可以参考以下几篇文档,或者自行查阅资料。
b. Introduction to Network Simulator NS2
为了让大家不走弯路,本来在自己折腾中最后折腾的一步,可以放在现在来弄,联想到这一步涉及到了c++文件,首先想到的就是需要有调试功能,要想使ns2可以使用调试器,就得在编译的时候加上-g的选项,但是我们并不是用gcc直接对单个文件进行编译的,因此在这里,也有相应的办法,在 NS2 的 makefile.in 的编译 flag 中加入 -g 选项,确认编译出的可执行文件带有调试用的信息: $ mvim Makefile.in:
![](https://i-blog.csdnimg.cn/blog_migrate/d10c54e74333322f159e0c9e5091c186.png)
把CCOPT这一行改一下,至少要加上-g,保存。接下来的步骤很重要,因为Mac OS下的环境跟linux有一些区别,因此如果用 ./configure,然后再用make来重新编译的话,基本会失败,而且把原有的ns2的指令也弄失效了,所以只能重新用./install指令安装一遍,就可以了。然后测试调试器是否可以使用:
$ lldb ns nam-example.tcl
(lldb) target create "ns"
SCANs: realpath [/Users/xxxxxx/ns2related/ns-allinone-2.35/otcl-1.14/otcl-1.14] failed with errno 62 (Too many levels of symbolic links)
Current executable set to 'ns' (x86_64).
(lldb) settings set -- target.run-args "nam-example.tcl"
(lldb) target create "ns"
SCANs: realpath [/Users/xxxxxx/ns2related/ns-allinone-2.35/otcl-1.14/otcl-1.14] failed with errno 62 (Too many levels of symbolic links)
Current executable set to 'ns' (x86_64).
(lldb) settings set -- target.run-args "nam-example.tcl"
(lldb)
确实进入了调试器的输入界面,说明安装成功。具体调试器怎么用就不介绍了,因为笔者也是新手,还不会用命令行操作lldb调试器。
注意:如果不小心使用了./configure命令导致整个软件失败的话,为了保险起见,首先要把之前打的补丁给卸载掉,然后重新打补丁(不一定是必须的,只是一种尝试方法),使用指令patch -p1 -R <patch_name即可卸载补丁,再根据3(2)中的教程重新打补丁,然后再重新安装。
(5)增加新的c++文件
这一步是重点,以下是由
NS by Example 截取的教程修改了一点然后翻译成中文
- 首先下载 "ex-linkage.cc" 文件, 放在 "ns-2” 目录下,我自己的目录名称是/Users/xxxxxx/ns2related/ns-allinone-2.35/ns-2.35/myCpp/
- 打开 "Makefile", 把 "ex-linkage.o” 增加到OBJ_CC后面,如下图337行所示:
- 然后在终端输入 "make" 重新编译.
- 下载 "ex-linkage.tcl” 文件
- 运行 "ns ex-linkage.tcl”结果如下图所示(如果没有把cc文件重新编译进去,是没办法正常运行tcl文件的).
- 进入调试模式,输入”lldb ns ex-linkage.tcl”.
4.总结
本文总结了自己安装ns2的过程以及遇到的问题和解决方式,在安装的过程中,参考了许多前人的研究结果,为了方便学习和交流,笔者写此文对此进行总结。
5.参考
[1].用 Xcode 调试 NS2
[2]. 在Mac os 10.9(Mavericks)中安装NS-2.35附自己制作的patch[修正一个错误]
[3].Mac OS X 中安装 brew
[4]NS by Example