how to install ns-2.35 in ubuntu20.04
step 1: Install the basic libraries
sudo apt install build-essential autoconf automake libxmu-dev
1) build-essential包含了 编辑和构建软件所需的基本工具和库。这些工具和库包括编译器(gcc),链接器(ld),make工具以及各种头文件和库文件。可以通过如下命令检查是否安装:
dpkg -s build-essential
若系统安装,则输出相关的信息。如下所示:
Package: build-essential Status: install ok installed Priority: optional Section: devel Installed-Size: 21 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Architecture: amd64 Version: 12.8ubuntu1.1 Depends: libc6-dev | libc-dev, gcc (>= 4:9.2), g++ (>= 4:9.2), make, dpkg-dev (>= 1.17.11)
2) Autoconf是一个开源工具,用于为软件项目生成可移植的配置脚本。可以通过如下命令检查是否安装:
autoconf --version
若对应的软件包,则输出如下信息:
autoconf (GNU Autoconf) 2.69 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+/Autoconf: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by David J. MacKenzie and Akim Demaille.
3) Automake是一个用于创建可移植Makefile的工具,它是GNU Autotools工具集中的一部分。Automake可以帮助开发者自动生成跨平台的Makefile,从而简化软件的构建和安装过程。它通过读取Makefile.am文件并生成Makefile.in文件,然后再通过configure脚本生成平台特定的Makefile。同样可以通过如下命令检查是否安装:
automake --version
若安装,则显示如下信息:
automake (GNU automake) 1.16.1 Copyright (C) 2018 Free Software Foundation, Inc. License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl-2.0.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Tom Tromey <tromey@redhat.com> and Alexandre Duret-Lutz <adl@gnu.org>.
4) libxmu-dev是Ubuntu操作系统中的一个开发数据包(development package),它提供了与X Window System有关的多个开发库和头文件,以便开发人员可以在其应用程序中使用这些库和头文件进行开发。具体而言,libxmu-dev包含了X11 Motif库(libXmu)的头文件和静态库文件(X11是一种用于Unix和Linux系统上的图形用户界面(GUI)的标准,它提供了窗口系统、显示设备驱动程序和一组基本工具包,可用于创建图形用户界面和图形应用程序。)。检查其是否安装可以通过如下命令:
dpkg -s libxmu-dev
若安装则会显示如下信息:
Status: install ok installed Priority: optional Section: libdevel Installed-Size: 223 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Architecture: amd64 Multi-Arch: same Source: libxmu Version: 2:1.1.3-0ubuntu1 Depends: libxext-dev, libxt-dev, libxmu6 (= 2:1.1.3-0ubuntu1), libxmu-headers (= 2:1.1.3-0ubuntu1)
step 2: 安装gcc-4.8 and g++-4.8
1、由于Ubuntu20.04上默认的gcc和g++是9.4.0版本。而NS-2是一个老的网络仿真工具,其不同版本支持的gcc和g++版本可能有所不同。一般而言,NS-2版本越老,其支持的gcc和g++版本可能越旧。在NS-2.35及以下的版本中,推荐使用gcc 4.3.3和g++ 4.3.3版本。对于NS-2.36及更高版本,推荐使用gcc 4.8.x和g++ 4.8.x版本。为此,本文需要先安装相应版本的gcc和g++。
2、以管理员权限打开如下文件,添加可以安装4.8版本的源
sudo nano /etc/apt/sources.list
1) /etc/apt/sources.list
是 Ubuntu 系统中包含可用软件包列表的配置文件。这个文件列出了 Ubuntu 软件仓库的地址和分发版号,系统使用这个文件来查找和下载软件包以安装和更新软件。
2) 当您在终端中运行 apt-get update
命令时,系统会从这个文件中列出的软件源地址下载一个软件包索引,并使用该索引查找可用的软件包。
3) 默认情况下,Ubuntu 20.04 中 /etc/apt/sources.list
包含了一些官方软件仓库的地址。但是,用户可以编辑这个文件,添加或删除软件源地址,以便访问第三方软件仓库或添加其他操作系统版本的软件包。
3、在文件末尾添加对应的Ubuntu 软件源的地址
deb http://in.archive.ubuntu.com/ubuntu bionic main universe
"http://in.archive.ubuntu.com/ubuntu" 是软件源的基本地址,"bionic" 表示这个源是提供给 Ubuntu 18.04 系统使用的,"main universe" 表示该源提供了主要(main)和宇宙(universe)软件仓库中的软件包。
1) deb: 软件包档案类型,deb为二进制预编译软件包/dev-src为用于编译二进制软件包的源代码 2) http://in.archive.ubuntu.com/ubuntu: 软件包所在仓库地址。 3) bionic: 发行版,bionic为Ubuntu18.04TLS。 4) main/universe: 软件包分类,main:包含符合DFSG指导原则的自由软件包,而且这些软件包不依赖不符合该指导原则的软件包;universe:Ubuntu官方不提供支持和补丁,全靠社区支持。
4、安装gcc-4.8 and g++-4.8
sudo apt update sudo apt install gcc-4.8 g++-4.8
1) update: 更新包缓存(可以知道包的哪些版本可以被安装或升级)。
2) upgrade: 升级所有(可升级的)包。
3) 通过如下命令可以查看所有版本的gcc和g++
dpkg --list | grep gcc
dpkg --list | grep g++
分别输出如下信息:
hj@ubuntu:~$ dpkg --list | grep gcc ii gcc 4:9.3.0-1ubuntu2 amd64 GNU C compiler ii gcc-10-base:amd64 10.3.0-1ubuntu1~20.04 amd64 GCC, the GNU Compiler Collection (base package) ii gcc-4.8 4.8.5-4ubuntu8 amd64 GNU C compiler ii gcc-4.8-base:amd64 4.8.5-4ubuntu8 amd64 GCC, the GNU Compiler Collection (base package) ii gcc-9 9.4.0-1ubuntu1~20.04.1 amd64 GNU C compiler ii gcc-9-base:amd64 9.4.0-1ubuntu1~20.04.1 amd64 GCC, the GNU Compiler Collection (base package) ii libgcc-4.8-dev:amd64 4.8.5-4ubuntu8 amd64 GCC support library (development files) ii libgcc-9-dev:amd64 9.4.0-1ubuntu1~20.04.1 amd64 GCC support library (development files) ii libgcc-s1:amd64 10.3.0-1ubuntu1~20.04 amd64 GCC support library hj@ubuntu:~$ dpkg --list | grep g++ ii g++ 4:9.3.0-1ubuntu2 amd64 GNU C++ compiler ii g++-4.8 4.8.5-4ubuntu8 amd64 GNU C++ compiler ii g++-9 9.4.0-1ubuntu1~20.04.1 amd64 GNU C++ compiler
step 3: 解压NS-2的压缩包
1) ns-allinone-2.35.tar.gz下载地址:
https://sourceforge.net/projects/nsnam/files/allinone/ns-allinone-2.35/
tar zxvf ns-allinone-2.35.tar.gz
2) tar zxvf
是一个用于解压 tar 压缩文件的命令。它通常用于在 Linux 和类 Unix 系统上解压缩 tar.gz 和 tar.bz2 格式的压缩文件。
具体来说,tar zxvf
命令的参数解释如下:
z 选项指定文件格式为 gzip 压缩格式,使用 gzip 命令解压缩文件。
x 选项表示解压缩文件。
v 选项表示在解压缩时显示详细的信息。
f 选项表示指定要解压缩的压缩文件。
step 4: 修改如下文件
1、文件路径: ~/ns-allinone-2.34/ns-2.35/Makefile.in
~/ns-2.35/Makefile.in
1) 将@CC@将gcc-4.8(指定编译器版本为gcc-4.8)
2) 将@CXX@更改为g++-4.8(指定编译器版本为g++-4.8)
2、文件路径: ~/ns-allinone-2.34/nam-1.14/ ~/ns-allinone-2.34/xgraph-12.1 ~/ns-allinone-2.34/otcl-1.13
~/nam-1.15/Makefile.in ~/xgraph-12.2/Makefile.in ~/otcl-1.14/Makefile.in
1) 将@CC@ 更改为gcc-4.8(指定编译器版本为gcc-4.8)
2) 将@CPP@或@CXX@ 更改为g++-4.8(指定编译器版本为g++-4.8)
3、文件路径: ~/ns-allinone-2.34/ns-2.34/linkstate
~/ns-2.35/linkstate/ls.h
1) 更改第137行的代码
void eraseAll() { erase(baseMap::begin(), baseMap::end()); }
将其更改为如下代码
void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); }
这样做的好处是可以明确地指示 erase
函数是 baseMap
类的成员函数,而不是全局函数或其他类的成员函数。
step 5: 打开一个新的命令终端
cd ns-allinone-2.35/ ./install
具体来说,当你运行"./install"脚本时,它会自动执行以下一些任务:
-
检查系统环境和依赖库:脚本会检查系统环境和依赖库是否已经安装,并提示用户安装缺失的库。
-
下载和安装Tcl:Tcl是NS-2所使用的脚本语言,脚本会自动下载并安装Tcl。
-
编译和安装OTcl、TclCL和NS-2库:这些库是NS-2所依赖的,脚本会自动编译并安装这些库。
-
编译和安装NAM:NAM是NS-2的网络动画工具,脚本会自动编译并安装NAM。
-
编译和安装NS-2:如果你在运行"./configure"命令时指定了"--with-ns"标志,则脚本会自动编译和安装NS-2可执行文件。
通过执行"./install"脚本,用户可以自动安装和配置NS-2以及相关工具,避免了手动下载、编译和安装这些工具的繁琐过程,让用户更加方便地使用NS-2进行网络仿真研究。(./congiure和make命令在其之后执行)
step 6: 配置环境变量
sudo gedit ~/.bashrc
1) .bashrc: 是home目录下的一个shell文件,用于储存用户的个性化设置。将ns-allinone-2.35软件包的相关路径添加到系统的环境变量中,以便在终端中运行ns2网络模拟器和相关的工具。
adding the following lines
export PATH=$PATH:/home/<yourusername>/ns-allinone-2.35/bin:/home/<yourusername>/ns-allinone-2.35/tcl8.5.10/unix:/home/<yourusername>/ns-allinone-2.35/tk8.5.10/unix export LD_LIBRARY_PATH=/home/<yourusername>/ns-allinone-2.35/otcl-1.14:/home/<yourusername>/ns-allinone-2.35/lib
1) <yourusername>: 自己设置的用户名。( whoami 可以帮助我们查询当前用户名)
注销并重新登录或是执行如下命令:
source .bashrc
1) source: 使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。