安装流程记录及错误解决方案

在用redhat装ns的过程中,几乎各种版本装过去,各种帖子参考过去,仍然没有成功。怒了,索性装了Ubuntu,再来装NS,也是各种帖子撸一遍,也是各种版本装过去,终于成功了。前前后后装了快有三个星期了,当我看到安装成功的信息的时候,几乎不敢相信自己的眼睛。不过还是赶紧记录一下,不然以后又忘记了。

 一、 首先安装Ubuntu,在Ubuntu的网站上下载桌面版的安装文件,是个iso文件。通过VM虚拟机装载Ubuntu操作系统。

而后根据提示重启系统,在系统引导界面选择ubuntu系统。进去后就可以等待其自动安装。

二. 下载ns-allinone-2.35安装包,网上搜索一下,有很多网站都有提供下载。

三.  NS的安装过程

 1、打开终端(ctrl+alt+T),安装必要的工具:

          $sudo apt-get update  (新安装的系统先执行这条命令)

          $sudo apt -get install build-essential

          $ sudo apt-get install tcl8.4 tcl8.4-dev tk8.4 tk8.4-dev

          $ sudo apt-get install libxmu-dev libxmu-headers

2、$sudo apt-cache search x11-dev出现如下类似的命令(以防出现类似tk8.4.14,安装中断退出)

            ibx11-dev - X11 client-side library (development headers)

            xlibs-dev - X Window System client library development files transitional package

            libghc6-x11-dev - Haskell X11 binding for GHC

            libooc-x11-dev - X11 specific modules for the oo2c compiler (devel)

            libgl1-mesa-swx11-dev - A free implementation of the OpenGL API -- development    support  files

分别安装上面的组件,命令如下:

             $ sudo apt-get install libx11-dev

             $sudo apt-get install xlibs-dev

             $sudo apt-get install libghc6-x11-dev

             $sudo apt-get install libooc-x11-dev

3、进入下载好的ns-allinone-2.35.tar.gz文件目录,解压缩:

               $ tar -xzvf ns-allinone-2.35.tar.gz

此时可以将文件夹拷到要安装的目录(我是安装到目录 /ns2的), 并进入目录:  

               $ sudo mv ns-allinone-2.35 /ns2

               $ cd /ns2/ns-allinone-2.35

然后修改两个地方(针对ununtu9.04以后的版本):

     输入cd otcl-1.13,进入otcl-1.13目录,找到configure.in.将77行,SHLIB_LD="ld -shared"改为   SHLIB_LD="gcc -shared"

     同时修改configure 第6304行SHLIB_LD="ld -shared"改为SHLIB_LD="gcc -shared"

4、正式进入安装过程:

              $ cd ..   (回到主目录ns-allinone-2.35)

              $ sudo ./install   (安装)

5.    安装的过程中,可能出现如下问题:

 错误一: tools/ranvar.cc: In member function ‘virtual double GammaRandomVariable::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! See http://www.isi.edu/nsnam/ns/ns-problems.html for problems

 解决办法: 在ns-allinone-2.35/ ns-2.35/tools文件夹下,找到报错提示中的ranvar.cc文件,打开找到对应的219行删 除::GaammaRandomVariable,保存, 即:将219行的 return GammaRandomVariable::GammaRandomVariable(1.0 + alpha_, beta_).value() * pow (u, 1.0 / alpha_); 改为: return GammaRandomVariable(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.35 s-2.35\mac\mac-802_11Ext.h 文件添加#include <cstddef>然后重新安装,就OK了。

错误三: mobile/nakagami.cc: 在成员函数‘virtual double Nakagami::Pr(PacketStamp*, PacketStamp*, WirelessPhy*)’中: mobile/nakagami.cc:185:67: 错误: 不能直接调用构造函数‘GammaRandomVariable::GammaRandomVariable’ [-fpermissive] mobile/nakagami.cc:185:67: 错误: 对于函数类型的类型转换,移除冗余的‘::GammaRandomVariable’ [-fpermissive]

 解决办法: 在ns-allinone-2.35/ ns-2.35/ mobile文件夹下,找到报错提示中的nakagami.cc文件,打开找到对应的183行删除::ErlangRandomVariable,保存, 即:将183行的 resultPower = ErlangRandomVariable::ErlangRandomVariable(Pr/m, int_m).value(); 改为: resultPower = ErlangRandomVariable(Pr/m, int_m).value(); 在ns-allinone-2.35/ ns-2.35/ mobile文件夹下,找到报错提示中的nakagami.cc文件,打开找到对应的185行删除::GammaRandomVariable,保存, 即:将185行的 resultPower = GammaRandomVariable::GammaRandomVariable(m, Pr/m).value(); 改为: resultPower = GammaRandomVariable(m, Pr/m).value(); 重新在ns目录下键入$ ./install安装,再次出现同类问题时,仿照此次解决方法,找到对应的文件和行数,修改即可。

6. 安装成功后,配置环境变量

进入目录/home/*user*(**是用户名,如我的是/home/Administrator),然后

           $ sudo gedit .bashrc

在文件末尾加入(记得把/ns2替换成自己的安装目录):

        PATH="$PATH: ns2/ns-allinone-2.35/bin: ns2/ns-allinone-2.35/tcl8.4.18/unix: ns2/ns-allinone-2.35/tk8.4.18/unix"

        LD_LIBRARY_PATH="ns2/ns-allinone-2.35/otcl-1.13: ns2/ns-allinone-2.35/lib"

        TCL_LIBRARY="$TCL_LIBRARY: ns2/ns-allinone-2.35/tcl8.4.18/library"

 保存退出(上述内容在安装结束后的提示中有,见粗体部分)。        使环境变量生效source .bashrc(可省略)

  7. 验证NS2

进入终端输入 cd /ns-allinone-2.35/ns-2.35

      ./validate (这要花一段时间,请耐心等待,这里我等了约一个小时)。

验证结束你将会看到如下信息:

      All test output agrees with reference output.

             2017年 01月 18日 星期二 10:33:41 CST

              These messages are NOT errors and can be ignored:

             warning: using backward compatibility mode

             This test is not implemented in backward compatibility mode validate

       overall report: some portable tests failed:

           ./test-all-newreno ./test-all-tcpOptions ./test-all-tcpVariants ./test-all-aimd ./test-all-frto ./test-all-quickstart ./test-all-manual-routing ./test-all-links

            some non-portable tests also failed:

            ./test-all-session

             to re-run a specific test, cd tcl/test; ./test-all-TEST-NAME

 

8.输入 sudo apt-get install gawk     (for gawk) ,这个比较快,一分钟

9.输入sudo apt-get install gnuplot    (for gnuplot) 这个5 分钟内可以完成

10. 结束

在终端中输入ns ,若出现% 则安装成功。其实不是的。

当我运行

       $ cd ~/ns-allinone-2.35/ns-2.35/tcl/ex

       $ ns simple.tcl

想验证下安装成功没时,报错:

            couldn't open "out.tr": permission denied

            while executing

            "open out.tr w"

           invoked from within

            "set f [open out.tr w]"

            (file "simple.tcl" line 13)

permission denied  意思是说 权限不够

好,我换根用户  sudo su

输入命令 ns

报错:“程序“ns”尚未安装。  您可以使用以下命令安装:          apt-get install ns2“

(英文版的应该就是Bash:ns :commend not found)

说明ns2 2.35 没有完全安装成功  !

在网上找到一个帖子解决了这个问题,试试make命令,使ns和nam路径在系统PATH中可用。

            $~ns-allinone-2.35/ns-2.35

            $ sudo  make install

          终端显示 for d in /usr/local/man/man1; do \

             if [ ! -d $d ]; then \

                        mkdir -p $d ;\

                    fi;\

                         done

               /usr/bin/install -c -m 755 ns /usr/local/bin

               /usr/bin/install -c -m 644 ns.1 /usr/local/man/man1

            

            $ cd ~ns-allinone-2.35/nam-1.14(nam文件在这个目录下)

     $ sudo make install

            终端显示/usr/bin/install -c -m 755 nam /usr/local/bin

这样把ns和nam的路径添加到系统路径下啦(通常ns和nam只依赖于usr/lib下的库文件)

 

 

安装完成后添加运行环境

ns-allinone-2.35文件夹之前为安装路径,各不相同。

网上的有些环境变量的添加格式不对,修改系统文件前请备份,谨慎。

export  PATH=“$PATH:/home/rooter/Documents/Firstfile/ns-allinone-2.35/bin: /home/rooter/Documents/Firstfile/ns-allinone-2.35/tcl8.5.10/unix: /home/rooter/Documents/Firstfile/ns-allinone-2.35/tk8.5.10/unix”

export  LD_LIBRARY_PATH=“$ LD_LIBRARY_PATH: /home/rooter/Documents/Firstfile/ns-allinone-2.35/otcl-1.14: /home/rooter/Documents/Firstfile/ns-allinone-2.35/lib”

export  TCL_LIBRARY= “$TCL_LIBRARY:/home/rooter/Documents/Firstfile/ns-allinone-2.35/tcl8.5.10/library”