之前在ubuntu11.04下安装ns2.34的,按网上攻略需要做以下步骤:
1、更新
在终端中输入以下命令,当然首先要保证网络畅通和更新源可用,更新源可以去网上找,很多
$ 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-head
2、修改配置文件
gcc 4.0版本以前是用ld -share来生成共享库的,但是到了4.0以上的版本(我的为gcc version 4.4.3),这个命令改为了gcc -share。
查看自己gcc版本的命令: gcc –version或者gcc -v
So,对于Ubuntu 11.04版,要修改两个配置文件:
命令: $cd /opt/ns-allinone-2.34/otcl-1.13
$sudo gedit configure.in
把 第77行的
SHLIB_LD="ld -shared"
修改成
SHLIB_LD="gcc -shared
存档退出
命令: $sudo gedit configure
把 第6304行附近
SHLIB_LD="ld -shared"
修 改成
SHLIB_LD="gcc -shared"
存档退出
在文本文档中查询行数的快捷键:Ctrl+I。
3、错误
直接安装会出现各种BT的错误:
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版本提高后对类内部函数调用的简化造成的不兼容,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_);
-
在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();
4、黎明前的黑暗
好不容易安装成功,结果在终端运行ns,出现错误:
*** buffer overflow detected ***: ns terminated
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x50)[0x451df0]
.......(注:这里省略了部分错误提示语句)
bfbbb000-bfbdc000 rw-p 00000000 00:00 0 [stack]
已放弃
这是gcc的版本问题,解决方法如下:
A、安装gcc-4.4
输入:sudo apt-get intall gcc-4.4
不知道为什么,我输入这条命令之后出现:
笔者作为菜鸟,在网上找了半天没找到解决办法,实在不行只能放弃了。
B、安装g++-4.4
输入:sudo apt-get intall g++-4.4
出现和上面一样的问题
C、修改tcl8.4.18/unix文件夹下的文件Makefile.in
将Makefile.in的270行:
CC = @CC@
修改为:
CC = @CC@ -V 4.4
注意是大写的‘V’,这样gcc使用的参数版本为4.4。
重新安装ns2.34。.
总结:
费尽千辛万苦九牛二虎之力才装好,版本高果然不见得是好事,由于我最后一步没成功,所以果断换了ubuntu10.04系统,自带gcc 4.4.3版本,参见前一篇文章,轻松成功!