Ubuntu 11.04 安装 ns2-allinone-2.34【完整版】(附各种问题解决方案)
这真是一个痛苦并快乐到过程,尝试多次安装,最终迎来来伟大的复兴!终于安装成功了!!!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
经验:先将本文提到的错误在./INSTALL 之前全部改正后可减少出错机会
1.首先,修改更新源,原有的更新源无法完成更新。
以下是 ubuntu 11.04 教育网的源:
sudo gedit /etc/apt/sources.list
natty-updates
main
restricted
universe
restricted
universe
natty-proposed
main
natty-security
main
http://mirrors.163.com/ubuntu/
http://mirrors.163.com/ubuntu/
http://mirrors.163.com/ubuntu/
http://mirrors.163.com/ubuntu/
#网易资源
deb http://mirrors.163.com/ubuntu/ natty main restricted universe multiverse
deb
multiverse
deb
multiverse
deb
multiverse
deb
multiverse
deb-src http://mirrors.163.com/ubuntu/ natty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ natty-security main restricted universe
multiverse
deb-src http://mirrors.163.com/ubuntu/ natty-updates main restricted universe
multiverse
deb-src http://mirrors.163.com/ubuntu/ natty-proposed main restricted universe
multiverse
deb-src http://mirrors.163.com/ubuntu/ natty-backports main restricted universe
multiverse
natty-backports
main restricted
universe
restricted
universe
2、更新 Ubuntu 系统文件,虽然系统是最新版本的,但是不代表里面的文件都是最新的,需
要更新。
使用快捷键 Alt + F2,得到程序查找窗口,输入 gnome termina,打开 Ubuntu 的终端,里面
依次输入命令
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
即可。这里首次采用 sudo 时,需要用户密码,也就是安装 ubuntu 时设置的。
3、为了更好的安装 ns2,还需要进行一些 package 的安装,打开终端,输入
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
4 、 在 http://sourceforge.net/projects/nsnam/files/ 上 可 以 下 载 到
ns-allinone-2.34.tar.gz , ( 或 者 在 国 内 CSDN 下 载 :
http://download.csdn.net/detail/shihuixian/2161551),将其放在/home/yourfile/下,
这里 yourfile 是用户自己定义的文件名,在终端中输入
tar zxvf ns-allinone-2.34.tar.gz
将 ns2.34 解压缩到指定的目录下
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
Attention!
如果 gcc 的版本大于 4.0 则在./install 之前要做一些修改("gcc 4.0 版本以前是用 ld -share
来生成共享库的,但是到了 4.0 以上的版本(我的为 gcc version 4.4.1),这个命令改为了
gcc -share 即可")
补充:怎样查看 gcc 版本?
终端执行 ls /usr/bin/gcc –l 或者 gcc –version 或者 gcc -v
查看过 gcc 版本之后,如果确实是 4.0 以上的版本,需要做以下修改:
cd ns-allinone-2.34/otcl-1.13
sudo gedit configure.in
把 77 行处的
SHLIB_LD="ld -shared"
改为
SHLIB_LD="gcc -shared"
保存退出,然后
sudo gedit configure
把 6304 行(Ctrl+F)的
SHLIB_LD="ld -shared"
改为
SHLIB_LD="gcc -shared"
保存退出,然后
cd ns-allinone-2.34 #到安装目录
sudo ./install #开始安装
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
下面高潮就来啦!所有问题尼玛就全来啦!
下面来的是各种各样的错误!
1.错误一:安装 NS2.34 过程中出现如下的错误:
In
member
function
tools/ranvar.cc:
GammaRandomVariable::value()’:
tools/ranvar.cc:219:70:
‘GammaRandomVariable::GammaRandomVariable’ directly
tools/ranvar.cc:219:70: error:
‘::GammaRandomVariable’
make: *** [tools/ranvar.o]错误 1
error:
‘virtual
double
call
constructor
cannot
for a function-style cast, remove the redundant
Ns make failed!
See http://www.isi.edu/nsnam/ns/ns-problems.html for problems
这是由于 gcc 版本提高后对类内部函数调用的简化造成的不兼容,解决方法如下:
在 ns-allinone-2.34/ ns-2.34/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.
error:
--------------------------------------------------------------------------------
---------------------------------------------------------------
2.错误二:重新在 ns 目录下键入$ ./install 安装,再次出现同类问题时,
如:
mobile/nakagami.cc: In member function ‘virtual double Nakagami::Pr(PacketStamp*,
PacketStamp*, WirelessPhy*)’:
mobile/nakagami.cc:183:73:
‘ErlangRandomVariable::ErlangRandomVariable’ directly
mobile/nakagami.cc:183:73: error:
redundant ‘::ErlangRandomVariable’
mobile/nakagami.cc:185:67:
‘GammaRandomVariable::GammaRandomVariable’ directly
mobile/nakagami.cc:185:67: error:
redundant ‘::GammaRandomVariable’
make: *** [mobile/nakagami.o]错误 1
Ns make failed!
See http://www.isi.edu/nsnam/ns/ns-problems.html for problems
for a function-style cast, remove the
for a function-style cast, remove the
call
constructor
cannot
error:
cannot
call
constructor
解决方法:
在 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 安装,再次出现同类问题时,仿照此次解决方法,找到对
应的文件和行数,修改即可。直到安装成功。
-----------------------------------------------------------------------------
-----------------------------------------------------------------
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
19439
00c54000-00c55000
19439
00c55000-00c56000
19439
00c5a000-00c5c000
261673
00c5c000-00c5d000
261673
00c5d000-00c5e000
261673
00cc0000-00ccd000
268150
00ccd000-00cce000
268150
00cce000-00ccf000
/usr/lib/i386-linux-gnu/libXext.so.6.4.0
/usr/lib/i386-linux-gnu/libXext.so.6.4.0
/usr/lib/i386-linux-gnu/libXau.so.6.0.0
/usr/lib/i386-linux-gnu/libXau.so.6.0.0
/usr/lib/i386-linux-gnu/libXau.so.6.0.0
/lib/i386-linux-gnu/ld-2.13.so
/lib/i386-linux-gnu/ld-2.13.so
/lib/i386-linux-gnu/ld-2.13.so
00000000
r-xp
r--p
rw-p
r-xp
r--p
rw-p
r-xp
r--p
rw-p
00000000
00001000
0001b000
0001c000
0000d000
00002000
00000000
0000c000
08:01
08:01
08:01
08:01
08:01
08:01
08:01
08:01
08:01
/usr/lib/i386-linux-gnu/libXext.so.6.4.0
r-xp
268150
00ef9000-00f0c000
19425
00f0c000-00f0d000
19425
00f0d000-00f0e000
19425
.......(注:这里省略了部分错误提示语句)
bfbbb000-bfbdc000 rw-p 00000000 00:00 0
已放弃
r--p
rw-p
/lib/i386-linux-gnu/libnsl-2.13.so
/lib/i386-linux-gnu/libnsl-2.13.so
/lib/i386-linux-gnu/libnsl-2.13.so
08:01
08:01
08:01
00000000
00012000
00013000
[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@(注意此处,在 Makefile.in 中 CC 后面有很长到空格,所以用 ctrl+f 搜 CC,找
到)
修改为:
CC = @CC@ -V 4.4
注意是大写的‘V’,这样 gcc 使用的参数版本为 4.4。
重新安装 ns2.34。.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5.问题解决了之后,不要忘记添加环境变量啊!
新开一个终端
$sudo gedit .bashrc
在弹出的窗口文件最后输入(注意修改“yourfile”(就是自己 NS 上一级文件夹)
export
PATH=$PATH:/home/yourfile/ns-allinone-2.34/bin:/home/yourfile/ns-allinone-2.
34/tcl8.4.18/unix:/home/yourfile/ns-allinone-2.34/tk8.4.18/unix
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/yourfile/ns-allinone-2.34/otcl-1.13:/home
/yourfile/ns-allinone-2.34/lib
export
TCL_LIBRARY=$TCL_LIBRARY:/home/yourfile/ns-alllinone-2.34/tcl8.4.18/library
设置完成后运行./install
6.验证(测试)
(1)打开一个新的终端
(2)输入 ns 并回车
$ns (如果正常,回出现"%"操作提示符)
(3)输入一段测试用的 Tcl 脚本代码进行测试
%puts "Hello World" (输出 Hello World 字符串)
Hello World (如果正确,会显示 Hello World)
% (然后跳到下一个"%"提示符等待下一条指令输入)
7.安装 nam
cd ns-allinone-2.34/nam-1.14
sudo ./configure
make
sudo make install (至此,nam 安装好)
8.至此,安装 ns2 终于结束了!太不容易了!!
再在/home/yourfile/ns-allinone-2.33/ns-2.33/tcl/ex 目录下找到 simple.tcl 文件,执
行如下:
$ns /home/yourfile/ns-allinone-2.33/ns-2.33/tcl/ex/simple.tcl
下文是补充内容
若出现网路模拟动画,恭喜,你的 NS 基本安装的差不多了,尽管放心用些菜鸟级别的功能吧。
################################################################################
##
###############################################################################
补充:./install 后会出现下面
Please
put
/home/mozhu/Public/ns-allinone-2.33/bin:/home/mozhu/Public/ns-allinone-2.33/tcl8.
4.18/unix:/home/mozhu/Public/ns-allinone-2.33/tk8.4.18/unix
into your PATH environment; so that you'll be able to run itm/tclsh/wish/xgraph.
IMPORTANT NOTICES:
put
/home/mozhu/Public/ns-allinone-2.33/otcl-1.13,
You
MUST
(1)
/home/mozhu/Public/ns-allinone-2.33/lib,
into your LD_LIBRARY_PATH environment variable.
If it complains about X libraries, add path to your X libraries
into LD_LIBRARY_PATH.
If you are using csh, you can set it like:
setenv LD_LIBRARY_PATH
If you are using sh, you can set it like:
export LD_LIBRARY_PATH=
(2) You MUST put /home/mozhu/Public/ns-allinone-2.33/tcl8.4.18/library into your
TCL_LIBRARY environmental
variable. Otherwise ns/nam will complain during startup.
After these steps, you can now run the ns validation suite with
cd ns-2.33; ./validate
For trouble shooting, please first read ns problems page
http://www.isi.edu/nsnam/ns/ns-problems.html Also search the ns mailing list
archive
for related posts.
有了上面的信息之后,可以看出主要的东西都安装成功了,接下来就是配置环境变量了。
————————————————————————————————————————
下面是网上找的关于 11.10 安装出现的问题解决方法:
If you get error like:
mac/mac-802_11Ext.h: In member function ‘u_int32_t PHY_MIBExt::getHdrLen11()’:
mac/mac-802_11Ext.h:176:19: error: expected primary-expression before ‘struct’
mac/mac-802_11Ext.h:176:41: error: ‘dh_body’ was not declared in this scope
mac/mac-802_11Ext.h:176:51: error: ‘offsetof’ was not declared in this scope
open that file and add
#include
to the header files.
在 ns-allinone-2.34\ns-2.34\mac\mac-802_11Ext.h 文件添加#include
然后重新安装,就 OK 了。
希望能给遇到相同问题的朋友们提供一个参考。