一, 首先要有一个类继承自TclObject类或者其子类,例如这个Mac802_16类的继承关系为:TclObject/NsObject/Mac /Mac802_16.这个类里面实现了C++类里面的变量与Otcl类的变量的绑定关系,以及我们的模块要实现的一系列算法等等,这个类负责的就是协议 的实现。
这个类,一般需要有构造函数中执行变量的绑定,使用bind()函数,将Otcl变量与C++的成员变量绑定起来。
声 明为protected的command()函数:为Otcl类提供方法,对Otcl中的类的方法进行翻译并执行;对于没有考虑到的或者不能解析的命令, 调用该C++类的父类的command方法。当在Otcl类中调用某个方法时,首先去tcl类中查找并执行该方法;若查找失败,则在该Otcl类对应的 C++类的command方法中查找,若查找仍然失败,则沿着该类的父类一直往上找,尝试调用它们的command方法;若所有父类的command方法 都不能解析,则报告该命令无法执行。
其他的成员变量和成员函数,这是用于实现自己的算法模块的内容。
二,其次我们要定义一个声明为static的类,继承自TclClass类,这个类实现了C++环境里面的类与Otcl环境里面的类的关联,简单点来说,这个类负责与Otcl环境进行关联。取最开头的那段代码
static class Mac802_16Class : public TclClass
{
public:
Mac802_16Class() : TclClass("Mac/802_16") {}
TclObject* create(int, const char*const*)
{
return (new Mac802_16())
}
} class_mac802_16
这 一段代码里面,包含了一个将Otcl的类名作为参数传给其父类的构造函数;一个create方法:创建一个C++类的对象实例并返回;该方法的返回类定义 为TclObject*。C++类的类型包含在create方法中,Otcl类的类型包含在TclClass类的构造函数中,因此可以实现C++类和 Otcl类的连接。
接下来,如果我们要实现的类完成以后,将头文件和源文件放置于~ns目录下自己新建的一个子目录,然 后打开~ns/Makefile文件,将“类名.o”添加到该Makefile的OBJ_CC宏定义中,对ns进行编译的时候就能够能够找到该模块的源文 件并将其编译到ns中;如果类中定义了一些变量,打开~ns/tcl/lib/ns-default.tcl文件,为该类对应的Otcl类设置一些初始 值。最后,对Makefile执行指令:make clean,make,对整个ns重新编译,我们的模块就可以添加到ns2中了。
安装环境:win7 32位 cygwin2.844 ns2.35软件下载:首先我推荐在32位系统上安装NS2,在64位安装过程中经常出现一些问题,不知道是否是兼 容性问题 ,反正没有32位安装顺利。cygwin版本不一样,支持的 *** 作系统也不同,我采用最新版本的cygwin,记住,32位系统要下载32位安装程序:setup-x86.exe。ns2我采用2.35版本。自行下载完成后等待安装。
安装过程:
1.如果你没装过cygwin的话,可以忽略这一步,如果装过,请清理干净cygwin,包括文件和注册表。
2.点击刚才下载的cygwin安装程序:setup-x86.exe,进行安装cygwin:
到了cygwin安装的最关键一步,选择需要安装的包组件,如上图所示,现选择可视模式为:full。然后把最下角的隐藏过期包组件那个勾去掉,因为NS2用的包组件大部分都是过期的,所以一定要执行这一步才能找到所有需要的安装包。
根据官网介绍,需要安装的包组件为下列包:
gcc gcc-g++ gcc4 gcc4-g++
gawk gnuplot gzipmake
patch perl tar win32api diffutils
X-startup-scripts xorg-x11-base xorg-x11-bin xorg-x11-devel xorg-x11-bin-dlls
xorg-x11-bin-lndir xorg-x11-etc xorg-x11-fenc xorg-x11-fnts xorg-x11-libs-data
xorg-x11-xwin libxt-devel libXmu-devel
我这边就介绍一种包组件(win32api)的安装:如下图所示,通过search选项查找win32,就可以显示出所以相关组件包,然后点击组件包Skip选项,就可以显示新的版本号,这样就表示选定安装。根据上述方法将上述包都查找出,最后在确认下这些包状态不是Skip即可。(漏掉包安装,后续安装NS2之前系统会进行自检,不能通过自检的。)
3. 安装完cygwin后,运行程序,你将在C:cygwinhome你的用户名 文件夹下面看到三个BASH文件,这三个文件时cygwin运行的配置文件,后面需要修改,注意,一定要看到这三个文件才能表示你cygwin安装成功。
4. 将下载的NS2安装包:ns-allinone-2.35.tar.gz拷贝到C:cygwinhome你的用户名 文件夹下,也就是跟那三个BASH文件放一起。运行cygwin,cygwin运行后默认的路径是:C:cygwinhome你的用户名 。 你可直接运行解压缩命令:
tar xfzv ns-allinone-2.35.tar.gz
5. 解压缩完后,cygwin在C:cygwinhome你的用户名 路径下产生了一个新的文件夹,你必须使用以下命令安装NS2:
cd ns-allinone-2.35 (进入解压缩后的文件夹)
./install (安装指令,现在不运行,等待下面修改好才安装)
6.在执行安装指令之前,必须修改一个代码行,不知道是这个版本的NS2和cygwin兼容性问题,还是系统问题,直接安装时到编译ls.o时会发现错误,然后跳出安装。所以之前必须修改代码:
修改ls文件:
进入C:cygwinhome你的用户名ns-allinone-2.35ns-2.35linkstatels.h 第137行
void eraseAll() { erase(baseMap::begin(), baseMap::end())}
改为:
void eraseAll() { this->erase(baseMap::begin(), baseMap::end())}
上图蓝色部分代表需要添加的代码,保存后,然后再运行指令: ./install
7.系统自动安装NS2,中间会跳出各种提示,直接无视。等待一段时间,根据机子配置的不同时间可能不一样,大概要大于半个小时左右。cygwin提示安装成功。
6. 安装成功后执行最后一步,设置环境变量,打开C:cygwinhome你的用户名 文件夹下的.bashirc文件,记住,不要用记事本等自带软件打开该文件,需要用UE等软件打开,不然运行时会出现“-bash: $'r': command not found”等提示,虽然不影响运行,但是看起来很不舒服。将以下内容复制到文件的末尾:
PATH="$PATH:/home/你的用户名/ns-allinone-2.35/bin:/home/你的用户名/ns-allinone-2.35/tcl8.5.10/unix:/home/你的用户名/ns-allinone-2.35/tk8.5.10/unix"
LD_LIBRARY_PATH="/home/你的用户名/ns-allinone-2.35/otcl-1.14, /home/你的用户名/ns-allinone-2.35/lib"
TCL_LIBRARY="$TCL_LIBRARY:/home/你的用户名/ns-allinone-2.35/tcl8.5.10/library"
保存后,记住cygwin必须重启,这样才能应用最新的环境变量配置!!
6. 验证环境变量是否正确,使用以下命令:
当你输入ns后,符号从$变成%,那就代表环境变量配置成功。
7. 运行例子验证NS安装成功:进入NS自带例子目录,如下:
运行ns simple.tcl后,显示运行结果,代表ns2安装成功。
至于nam运行提示没有配置成功,这不是环境变量配置问题,因为nam需要在Xwin Server里面运行才行。
所以以后运行NS2脚本时可以再Xwin Server窗口运行。
8:打开Xwin Server(开始菜单里cygwinX里面就有这个选项),在窗口输入以下命令,可以验证NS和nam命令是否可用:
cd ns-allinone-2.35/ns-2.35/tcl/ex
ns simple.tcl
运行结果图如下:
9.到此,所有安装过程结束,你可以自由地在NS2上面跑程序和项目了。
最后,再次声明:本教程仅限于win7 32位,NS2.35版本,其他版本和系统安装不一定适用,请慎重参考。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)