ubuntu 8.04下安装NS2(ns-allinone-2.30) 安装问题处理(转)

时间:2022-02-06 07:05:04

NS2是一个功能强大的网络模拟工具,下面介绍一下我在ubuntu7.10系统下安装NS2所遇到的艰难险阻,给后来者以借鉴。



在Ubuntu 11.04中安装ns-2.33,以前在Ubuntu-10.10安装ns-2.33没有遇到过这种错误,后来升级了一下Ubuntu的版本,就会出现以下错误。

 

可参考以下网址上说的解决方法:

http://erl1.wordpress.com/2011/05/12/installing-ns-2-34-on-ubuntu-11-04/

 

1.错误一:安装NS2.33过程中出现如下的错误:

 

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

 

这是由于gcc版本提高后对类内部函数调用的简化造成的不兼容,解决方法如下:

 

在ns-allinone-2.33/ ns-2.33/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_);

 

-----------------------------------------------------------------------------------------------------------------------------------------------

2.错误二:重新在ns目录下键入$ ./install安装,再次出现同类问题时,

如:

mobile/nakagami.cc: In member function ‘virtual double Nakagami::Pr(PacketStamp*, PacketStamp*, WirelessPhy*)’:

mobile/nakagami.cc:183:73: error: cannot call constructor ‘ErlangRandomVariable::ErlangRandomVariable’ directly

mobile/nakagami.cc:183:73: error:  for a function-style cast, remove the redundant ‘::ErlangRandomVariable’

mobile/nakagami.cc:185:67: error: cannot call constructor ‘GammaRandomVariable::GammaRandomVariable’ directly

mobile/nakagami.cc:185:67: error:  for a function-style cast, remove the redundant ‘::GammaRandomVariable’

make: *** [mobile/nakagami.o]错误1

Ns make failed!

See http://www.isi.edu/nsnam/ns/ns-problems.html for problems

 

解决方法:

在ns-allinone-2.33/ ns-2.33/ mobile文件夹下,找到报错提示中的nakagami.cc文件,打开找到对应的183行删除::ErlangRandomVariable,保存,

即:将183行的

resultPower = ErlangRandomVariable::ErlangRandomVariable(Pr/m, int_m).value();

改为:

resultPower = ErlangRandomVariable(Pr/m, int_m).value();

在ns-allinone-2.33/ ns-2.33/ mobile文件夹下,找到报错提示中的nakagami.cc文件,打开找到对应的185行删除::GammaRandomVariable,保存,

即:将185行的

resultPower = GammaRandomVariable::GammaRandomVariable(m, Pr/m).value();

改为:

resultPower = GammaRandomVariable(m, Pr/m).value();

 

重新在ns目录下键入$ ./install安装,再次出现同类问题时,仿照此次解决方法,找到对应的文件和行数,修改即可。直到安装成功。

 

 ----------------------------------------------------------------------------------------------------------------------------------------------

3.错误三:安装成功之后,输入命令ns之后出现如下错误:

*** buffer overflow detected ***: ns terminated

======= Backtrace: =========

/lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x50)[0x451df0]

/lib/i386-linux-gnu/libc.so.6(+0xe4cca)[0x450cca]

/lib/i386-linux-gnu/libc.so.6(__strcpy_chk+0x3f)[0x45005f]

ns(TclTraceVariableObjCmd+0x420)[0x83adb00]

ns(Tcl_TraceObjCmd+0x469)[0x83b2989]

ns(TclEvalObjvInternal+0x37b)[0x839f2bb]

ns(Tcl_EvalEx+0x419)[0x83a11a9]

ns(Tcl_Eval+0x3c)[0x83a14cc]

ns(Tcl_GlobalEval+0x36)[0x83a2086]

ns(_ZN3Tcl4evalEPc+0x1b)[0x839438b]

ns(_ZN3Tcl5evalcEPKc+0xb3)[0x839435d]

ns(_ZN11EmbeddedTcl4loadEv+0x1d)[0x83952cf]

ns(Tcl_AppInit+0xb5)[0x83940ab]

ns(Tcl_Main+0x285)[0x83eb0c5]

ns(nslibmain+0x20)[0x8393fd4]

ns(main+0x1b)[0x8394147]

/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x382e37]

ns[0x81a8481]

======= Memory map: ========

00c38000-00c54000 r-xp 00000000 08:01 19439     /lib/i386-linux-gnu/ld-2.13.so

00c54000-00c55000 r--p 0001b000 08:01 19439     /lib/i386-linux-gnu/ld-2.13.so

00c55000-00c56000 rw-p 0001c000 08:01 19439     /lib/i386-linux-gnu/ld-2.13.so

00c5a000-00c5c000 r-xp 00000000 08:01 261673    /usr/lib/i386-linux-gnu/libXau.so.6.0.0

00c5c000-00c5d000 r--p 00001000 08:01 261673    /usr/lib/i386-linux-gnu/libXau.so.6.0.0

00c5d000-00c5e000 rw-p 00002000 08:01 261673    /usr/lib/i386-linux-gnu/libXau.so.6.0.0

00cc0000-00ccd000 r-xp 00000000 08:01 268150    /usr/lib/i386-linux-gnu/libXext.so.6.4.0

00ccd000-00cce000 r--p 0000c000 08:01 268150    /usr/lib/i386-linux-gnu/libXext.so.6.4.0

00cce000-00ccf000 rw-p 0000d000 08:01 268150    /usr/lib/i386-linux-gnu/libXext.so.6.4.0

00ef9000-00f0c000 r-xp 00000000 08:01 19425     /lib/i386-linux-gnu/libnsl-2.13.so

00f0c000-00f0d000 r--p 00012000 08:01 19425     /lib/i386-linux-gnu/libnsl-2.13.so

00f0d000-00f0e000 rw-p 00013000 08:01 19425     /lib/i386-linux-gnu/libnsl-2.13.so

.......(注:这里省略了部分错误提示语句)

bfbbb000-bfbdc000 rw-p 00000000 00:00 0         [stack]

已放弃

 

这是gcc的版本问题,解决方法如下:

1.安装gcc-4.4

输入:sudo apt-get intall gcc-4.4

2.安装g++-4.4

输入:sudo apt-get intall g++-4.4

3.修改tcl8.4.18/unix文件夹下的文件Makefile.in

将Makefile.in的270行:

CC = @CC@

修改为:

CC = @CC@ -V 4.4

注意是大写的‘V’,这样gcc使用的参数版本为4.4。

重新安装ns2.33。.





问题一:刚开始安装时显示gcc can't create executables之类的提示

解决方案:
这是由于我用的是ubuntu免费邮寄的安装盘,安装后的系统中gcc是不能用来的开发的,只有一个空壳,所以需要重新安装gcc。先用命令: sudo apt-get remove gcc
然后sudo apt -get install build-essential 便成功解决问题。

问题二:再次安装NS2时发现安装至tk8.4.13时出现错误,安装中断退出。在安装日志上发现一句:x11/xlib.h nosuch file or directory 在网上查阅了资料,原来是x11M没有装。

解决方案:
先安装X11,命令为    sudo apt -get install libx11-dev
结果仍然出错如下:
checking for main in -lXbsd... no
checking for socket in -lsocket... no
checking for gethostbyname in -lnsl... yes
checking for dcgettext in -lintl... no
checking for getnodebyname in -ldnet_stub... no
checking that g++ can handle -O2... no
checking standard STL is available... no
checking for tcl.h... -I../include
checking for tclInt.h... -I../include
checking for libtcl8.4... -L../lib -ltcl8.4
checking for init.tcl... ../lib/tcl8.4
checking for http.tcl... ../lib/tcl8.4/http1.0
checking Tcl http.tcl library... yes
checking for tclsh8.4.11... no
checking for tclsh8.4... ../bin/tclsh8.4
checking for tk.h... -I../include
checking for libtk8.4... -L../lib -ltk8.4
checking for tk.tcl... ../lib/tk8.4
checking for X11 header files
can't find X includes
otcl-1.12 configuration failed! Exiting ...
Please check http://www.isi.edu/nsnam/ns/ns-problems.html
for common problems and bug fixes.
还是没有得到解决.分析了一下可能是x11没有安装完整,于是先输入:sudo apt-cache search x11-dev
得到以下信息:
libx11-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

然后继续安装,等了半天,安装完成!

问题三:安装好NS2后,还有设置环境变量。(路径随个人而定,安装好看提示)

命令为: sudo gedit ~/.bashrc
在打开的.bashrc文件结尾加上三句:
export PATH="/home/ns2/ns-allinone-2.30/bin:/home/ns2/ns-allinone-2.30/nam-1.12:/home/ns2/ns-allinone-2.30/tcl8.4.13/unix:/home/ns2/ns-allinone-2.30/tk8.4.13/unix"

export LD_LIBRARY_PATH=" /home/ns2/ns-allinone-2.30/otcl-1.12, /home/ns2/ns-allinone-2.30/lib"

export TCL_LIBRARY=" /home/ns2/ns-allinone-2.30/tcl8.4.13/library"

注意:/home/ns2/ns-allinone-2.30/为安装文件所在目录,三个环境变量的值在NS2安装完成时在提示信息中会给出。
另外补充一点:我在设置了上述环境变量后,发现ls命令不能使用了,我分析得出:可能是设置环境变量时将系统原来的PATH值替换掉了。于是我将上面三句删掉,重新打开一个
终端,输入命令 sudo echo $PATH 得到原始值为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
将上面的值粘贴到上面的第一句末尾,注意用分号分开各个路径,如下:
export PATH="/home/ns2/ns-allinone-2.30/bin:/home/ns2/ns-allinone-2.30/nam-1.12:/home/ns2/ns-allinone-2.30/tcl8.4.13/unix:/home/ns2/ns-allinone-2.30/tk8.4.13/unix:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
然后再将修该后的三个语句放到.bashrc中即可。设置好后,打开终端输入ns回车就会出现%,表明设置成功。

问题四:安装成功后运行样例程序发现ns模拟没有问题就是不能自动调用nam!
显示错误为:
ns: finish: couldn't execute "nam": no such file or directory
    while executing
"exec nam out.nam &"
    (procedure "finish" line 7)
    invoked from within
"finish"

解决方案:
先手动编译nam生成可执行文件nam
进入NS_HOME/nam-1.12(NS_HOME为安装ns2的路径)输入命令:make
结果显示错误:
xwd.c:87:29: 错误: X11/Xmu/WinUtil.h:No such file or directory
make: *** [xwd.o] 错误 1
问题是xmu没有安装,于是只好再装xmu,
命令为:
sudo apt-get install libxmu-dev

然后在输入make进行编译,完成后在NS_HOME/nam-1.12/中可以发现可执行文件nam将其复制到 NS_HOME/bin/目录下,这样由于$PATH环境变量中有NS_HOME/bin项,nam就可以直接运行了。

至此,终于大功告成了!!!

 

(2)问题解决

一般来说只要环境满足条件,安装应该很顺利

但是也有遇到问题的时候

 

问题1:

checking system version (for dynamic loading)...

./configure: line 7624:syntax error near unexpected token `)'

./configure: line 7624: `        OSF*)'

tcl8.3.2 configuration failed! Exiting ...

Tcl is not part of the ns project.

  

解决办法:

在ns-allinone-x.xx目录下

$ grep 'system=MP-RAS-' ***/*/* -n

把那些文件里的

system=MP-RAS-`awk ' { print $3 } '/etc/.relid'`

     改为:

system=MP-RAS-`awk ' { print $3 } '/etc/.relid`

也就是那行多了一个'号

问题2:

make: *** [tk3d.o] 错误 1

安装libx11-dev可以解决问题

问题3:

can't find X includes

otcl-1.11 configuration failed Exiting ...

安装x-window-system-dev可以解决问题

问题4:

make: g++:命令未找到

make: ***[tcl2c++]错误 127

tclcl-1.17 make failed! Exiting ...

安装g++

编译出错

1.如何去掉warning: assignment makes pointer from integer without a cast的警告

编写了段代码:
函数原形为:char *cfg_get(const char *name);

在main()中调用上述函数方式如下:
char *dev_IMEI = cfg_get((char *)"dm_imei");

但是此调用处编译出现warming如下:
warning: assignment makes pointer from integer without a cast

请问为啥会有这样的warming,如何修改才能不出现这样的warming?

原因是:头文件里面有声明了函数char *cfg_get(const char *name); ubuntu <wbr>8.04下安装NS2(ns-allinone-2.30)

去掉就可以不

2. syntax error near unexpected token `in

在Vim中解决这个问题,很简单,在Vim中利用替换功能就可以将“^M”都干掉,键入如下替换命令行:

1)vi -b setup.sh

2)在命令编辑行<就是: 按ESC键然后shift+:冒号>输入:%s/^M//g

注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的。

这样替换掉以后,保存就可以执行了。当然还有其他的替换方式比如:

a.一些linux版本有 dos2unix 程序,可以用来祛除^M。

b.cat filename1 | tr -d "\r" > newfile 去掉^M生成一个新文件,还有sed命令等,凡是可以替换的命令都是可以用来新生成一个文件的

3.implicit declaration of function `memset'

C库没有包含进来

加入include "string.h"就解决不

4.warnings being treated as errors

去掉 CFLAGS 里的 -Werror

按几下TAB看是否是按装相应版本的编译器