1、首先下载
Google 一下ns2,下载allinone包到本地
2、安装编译必须的软件包
sudo apt-get remove gcc #移除gcc
sudo apt-get install build-essential #for gcc and someessential
sudo apt-get install tcl8.4 tcl8.4-dev tk8.4tk8.4-dev #for tcl and tk
sudo apt-get install libxmu-devlibxmu-headers #for nam
3、解压1中下载的安装包到指定目录
先将安装包复制到:/usr
再解压:sudo tar -xzf ns-allinone-2.34.tar.gz
4、在安装之前先修改一些配置文件,否则出错
cd /usr/ns-allinone-2.34/otcl-1.13
sudo gedit configure.in
把77行的SHLIB_LD="ld -shared",改为SHLIB_LD="gcc -shared",保存退出。
然后 sudo gedit configure
Ctrl+F了一下,在6304行找到了。把SHLIB_LD="ld -shared"改为SHLIB_LD="gcc-shared",保存退出。
5、安装
cd /usr/ns-allinone-2.34 #到安装目录
sudo ./install #开始安装
6、环境配置
用cd进入目录/home/**(**是用户名),然后
sudo gedit .bashrc
在文件末尾加入:(/use安装目录)
PATH="$PATH:/usr/ns-allinone-2.34/bin:/usr/ns-allinone-2.34/tcl8.4.18/unix:/usr/ns-allinone-2.34/tk8.4.18/unix"
LD_LIBRARY_PATH="/usr/ns-allinone-2.34/otcl-1.13:/usr/ns-allinone-2.34/lib"
TCL_LIBRARY="$TCL_LIBRARY:/usr/ns-allinone-2.34/tcl8.4.18/library"
保存退出(上述内容在安装结束后的提示中有,见粗体部分)。
7.
安装的过程中,可能出现如下问题:
错误一: tools/ranvar.cc: In member function ‘virtual doubleGammaRandomVariable::value()’: tools/ranvar.cc:219:70: error:cannot call constructor ‘GammaRandomVariable::GammaRandomVariable’directly tools/ranvar.cc:219:70: error: for a function-style cast,remove the redundant ‘::GammaRandomVariable’ make: ***[tools/ranvar.o]错误1 Ns make failed! Seehttp://www.isi.edu/nsnam/ns/ns-problems.html for problems
解决办法: 在ns-allinone-2.34/ns-2.34/tools文件夹下,找到报错提示中的ranvar.cc文件,打开找到对应的219行删除::GaammaRandomVariable,保存, 即:将219行的 returnGammaRandomVariable::GammaRandomVariable(1.0 + alpha_,beta_).value() * pow (u, 1.0 / alpha_); 改为: returnGammaRandomVariable(1.0 + alpha_, beta_).value() * pow (u, 1.0 /alpha_); 然后保存退出,重新安装ns2。
错误二: In file included from mac/mac-802_11Ext.cc:66:0:mac/mac-802_11Ext.h: 在成员函数‘u_int32_t PHY_MIBExt::getHdrLen11()’中:mac/mac-802_11Ext.h:175:19: 错误: expected primary-expression before‘struct’ mac/mac-802_11Ext.h:175:41: 错误: ‘dh_body’在此作用域中尚未声明mac/mac-802_11Ext.h:175:51: 错误: ‘offsetof’在此作用域中尚未声明mac/mac-802_11Ext.h:177:3: 警告: 在有返回值的函数中,控制流程到达函数尾[-Wreturn-type]
解决办法: 在ns-allinone-2.34 s-2.34\mac\mac-802_11Ext.h 文件添加#include<cstddef>然后重新安装,就OK了。
错误三: mobile/nakagami.cc: 在成员函数‘virtual doubleNakagami::Pr(PacketStamp*, PacketStamp*, WirelessPhy*)’中:mobile/nakagami.cc:185:67: 错误:不能直接调用构造函数‘GammaRandomVariable::GammaRandomVariable’ [-fpermissive]mobile/nakagami.cc:185:67: 错误:对于函数类型的类型转换,移除冗余的‘::GammaRandomVariable’ [-fpermissive]
解决办法: 在ns-allinone-2.34/ ns-2.34/mobile文件夹下,找到报错提示中的nakagami.cc文件,打开找到对应的183行删除::ErlangRandomVariable,保存,即:将183行的 resultPower =ErlangRandomVariable::ErlangRandomVariable(Pr/m, int_m).value();改为: resultPower = ErlangRandomVariable(Pr/m, int_m).value();在ns-allinone-2.34/ ns-2.34/mobile文件夹下,找到报错提示中的nakagami.cc文件,打开找到对应的185行删除::GammaRandomVariable,保存,即:将185行的 resultPower = GammaRandomVariable::GammaRandomVariable(m,Pr/m).value(); 改为: resultPower = GammaRandomVariable(m,Pr/m).value(); 重新在ns目录下键入$./install安装,再次出现同类问题时,仿照此次解决方法,找到对应的文件和行数,修改即可。
错误四:In file included fromlinkstate/ls.cc:67:0:
linkstate/ls.h: In instantiation of ‘void LsMap::eraseAll() [withKey = int; T = LsIdSeq]’:
linkstate/ls.cc:396:28: required from here
linkstate/ls.h:137:20: error: ‘erase’ was not declared in thisscope, and no declarations were found by argument-dependent lookupat the point of instantiation [-fpermissive]
linkstate/ls.h:137:20: note: declarations in dependent base‘std::map, std::allocator > >’ arenot found by unqualified lookup
linkstate/ls.h:137:20: note: use ‘this->erase’instead
make: *** [linkstate/ls.o] Error 1
Ns make failed!
解决办法:修改ls文件:ns-2.34/linkstate/ls.h
第137行
void eraseAll() { erase(baseMap::begin(), baseMap::end()); }
改为:void eraseAll() {this->erase(baseMap::begin(), baseMap::end()); }
8、安装验证(可选)
打开一个新终端,输入ns,如果出现%,则说明安装成功。
也可以进入/usr/ns-allinone-2.34/ns-2.34/,输入./validate验