有时候我们可能会遇到要同时安装两个ns版本的问题,比如我研究wimax/802.16,因为协议太复杂,用的是长庚大学和nist的wimax补丁。长庚大学的wimax补丁是在ns2.29下开发的,nist的wimax补丁虽说可以在多个ns版本上使用,但是在ns2.31上移植最简单。因此如果能够两个版本同时使用当然最好,事实上这也是可以实现的。
我们用./install安装好后,没有设置环境变量在终端上是不能使用ns命令的,除非你在ns-2~/文件夹下。呵呵,其实这样已经告诉我们一种解决两个版本同时使用的方案了,那就是不设置环境变量,当我们需要执行仿真代码a.tcl时,就指定ns命令的路径:/home/ns-allinone-2.29/ns-2.29/ns a.tcl或/home/all-inone-2.31/ns-2.31/ns a.tcl(我的ns是安装在home文件夹下)。
如果在.bashrc上设定其中一个版本的环境变量,比如说ns2.31则你的终端就可以使用ns2.31版本的ns命令了,另外一个则仍旧要指定路径全称才能使用。
有没有其它更好的办法?有的!其实我们的ns2安装后并不是安装到Linux系统内部了,ns命令是通过链接ns-allinone-2.~/ns-2~/ns实现的。这样就好办了,因为怕就怕在两个ns版本都设定了环境变量的情况下,我们在终端敲入ns命令只能识别其中一个罢了。知道了原委,我们就可以通过重新创建链接的方式来改变命令ns的名称,比如我们可以把2.29版本的ns命令改成ns2.29,把2.31版本的ns命令改成ns2.31,这样就可以避免名称的冲突了。
具体的实现是:假若我们先安装ns2.29,目录是/home/ns-allinone-2.29/,在linux下安装完ns2.29并设置好环境变量以后,打开ns-allinone-2.29/bin目录,用file ns查看链接关系,得到bin文件夹下的ns链接是链接到了:/home/ns-allinone-2.29/ns-2.29/ns上,你可以删除这个链接:rm ns,重建一个连接:ln -s /home/ns-allinone-2.29/ns-2.29/ns ns2.29,这样ns2.29版本的仿真命令就变成了ns2.29了,你再在终端敲入ns看看是不是一个未知命令呢?然后再敲个ns2.29看看,有个%号出来了吧!用这个方式重建nam和xgraph的链接,将它们改为nam2.29和xgraph2.29。接着安装ns2.31,环境变量可以同时设置好,完毕后你在终端敲ns命令其实就是执行2.31,nam和xgraph也是2.31的,为方便记忆,你也可以仿照上面的方式将ns、nam、xgraph的连接改成ns2.31、nam2.31、xgraph2.31。然后要执行脚本的话,想用ns2.29版本的ns就用:ns2.29 a.tcl就可以了。
note1:其他发行版我没有试过,不过应该是可以通过上述的方法安装多个ns版本的。
note2:增补一个说明,当为两个版本的ns2设置环境变量的时候,只有一个LD_LIBRARY_PATH的设置能够生效,一般是最先设置的一个,不过可能是2.29和2.31的库文件没有很多变化,其中一个的库另一个也能正常调用,在我的使用过程中没有发现问题。