ubuntu安装ns2常见错误收集一
问题一:刚开始安装时显示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
问题附加:会遇到报错:
make: *** [libotcl.so]错误1
otcl-1.13 make failed! Exiting ...
See http://www.isi.edu/nsnam/ns/ns-problems.html for problems
原因是:
gcc 4.0版本以前是用ld -share来生成共享库的,但是到了4.0以上的版本(比较新版本的ubuntu的gcc肯定高过4.0),这个命令改为了gcc -share即可
解决过程:
cd /home/endymion/ns-allinone-2.34/otcl-1.13
1、sudo gedit configure.in
把77行处的
SHLIB_LD="ld -shared"
改为
SHLIB_LD="gcc -shared"
保存退出,然后
2、sudo gedit configure
把6304行的
SHLIB_LD="ld -shared"
改为
SHLIB_LD="gcc -shared"
保存退出
然后继续安装,等了半天,安装完成!
问题三:安装好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
$ grep 'system=MP-RAS-' */*/* -n
$ 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:
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);
去掉就可以不
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看是否是按装相应版本的编译器
安装完后,再安装ns2.终于正确地安装了ns2.兴奋中~~~~