Ubuntu 10.04下安装ns2-allinone-2.33(或者ns2-allinone-2.31)
进入ns-allinone-2.33文件夹输入$ cd ./install安装,差不多等几分钟吧,然后会出现一个错误提示:
make: *** [libotcl.so] 错误 1
otcl-1.13 make failed! Exiting ...
See http://www.isi.edu/nsnam/ns/ns-problems.html for problems
这是因为gcc版本高了,gcc 4.0版本以前是用ld -share来生成共享库的,但是到了4.0以上的版本,这个命令改为了gcc -share。在终端里输入gcc -v查看,我的版本是gcc version 4.4.1。
然后进入$ cd /ns-allinone-2.33/otcl-1.13,然后$ sudo gedit configure.in
把77行(如果不是,在附近找)的SHLIB_LD="ld -shared",改为SHLIB_LD="gcc -shared",保存退出。然后
$ sudo gedit configure
在5518行找(如果不是,在附近找),把SHLIB_LD="ld -shared"改为SHLIB_LD="gcc -shared",保存退出。
cd回到目录ns-allinone-2.33下,重新运行
sudo ./install
顺利完成安装。最后出来提示:
Please put /home/jyq/ns-allinone-2.33/bin:/home/jyq/ns-allinone2.33/tcl8.4.18/unix:/home/jyq/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:
(1) You MUST put /home/jyq/ns-allinone-2.33/otcl-1.13, /home/jyq/ns-allinone-2.34/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 <paths>
If you are using sh, you can set it like:
export LD_LIBRARY_PATH=<paths>
(2) You MUST put /home/jyq/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.
这个是因为没有配置环境变量,然后cd进入/home/jyq/下,$ sudo gedit .bashrc。
在文件末尾加入:
PATH="$PATH:/home/jyq/ns-allinone-2.33/bin:/usr/ns-allinone-2.33/tcl8.4.18/unix:/home/jyq/ns-allinone-2.33/tk8.4.18/unix"
LD_LIBRARY_PATH="/home/jyq/ns-allinone-2.33/otcl-1.13:/usr/ns-allinone-2.33/lib"
TCL_LIBRARY="$TCL_LIBRARY:/home/jyq/ns-allinone-2.33/tcl8.4.18/library"
保存退出。然后重新安装 $ sudo ./install。
到ns2.33目录下把NS可执行命令考到/bin目录下
sudo cp ns-2.33/ns.exe /bin
到这一步,应该可以说完成了,在终端输入ns,出现%就证明安装成功。
但是运行nam时,会出现如下错误:
[code omitted because of length]
: no event type or button # or keysym
while executing
"bind Listbox <MouseWheel> {
%W yview scroll [expr {- (%D / 120) * 4}] units
}"
invoked from within
"if {[tk windowingsystem] eq "classic" || [tk windowingsystem] eq "aqua"} {
bind Listbox <MouseWheel> {
%W yview scroll [expr {- (%D)}] units
}
bind Li..."
上网查了一下,说是ns2.33的nam调用的tk组件和 xproto-7.0.13 不兼容导致的(xproto-7.0.13 新添加了 GenericEvent),所以我们要打上补丁。有的教程说写个patch,然后运行,我觉得这个方法没有那么好,至少对于我这种菜鸟是如此,直接在tk-8.4.14/generic/tkBind.c的第588行添加如下代码:
#ifdef GenericEvent
0,
#endif
保存退出。然后在重新安装一遍。有的机器在这一步应该就可以运行了,但是我的没有,输入nam还是运行不了,还是出现nam错误,我又查了一下,原来是ns.exe文件和nam.exe文件没放到/usr/local/bin/下,然后在打开终端输入
$ sudo cp -i nam /usr/local/bin/
$ sudo cp -i ns /usr/local/bin/
将ns和nam都copy过来就行。
再次运行ns应该就没有问题了,至少我的机器没问题了,然后输入:
$ ns /ns-allinone-2.33/ns-2.33/tcl/ex/simple.tcl
就会出现一个简单的nam窗口。就大功告成了。
==============================================================================
在编译过程中,编译器的报错和警告信息对于程序员来说是非常重要的信息,GCC包含完整的出错检查和警告提示功能,它可以帮助Linux程序员尽快找出错误的或潜在的错误代码,从而写过更优美的代码。GCC的编译器警告选项如下表:
类型 |
说明 |
-Wall |
启用所有警告信息 |
-Werror |
在发生警告时取消编译操作,即将警告看作是错误 |
-w |
禁用所有警告信息 |
使用./configure --enable-debug之后,编译器会降低报错等级,make过程中的warning将变为error,这需要让编译器不将warning报错:
将安装文件中的makefile中第55行
CCOPT
= -g -Wall -Werror -Wall 修改成为CCOPT
= -g -Wall -Wall