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"脚本时,它会自动执行以下一些任务:

  1. 检查系统环境和依赖库:脚本会检查系统环境和依赖库是否已经安装,并提示用户安装缺失的库。

  2. 下载和安装Tcl:Tcl是NS-2所使用的脚本语言,脚本会自动下载并安装Tcl。

  3. 编译和安装OTcl、TclCL和NS-2库:这些库是NS-2所依赖的,脚本会自动编译并安装这些库。

  4. 编译和安装NAM:NAM是NS-2的网络动画工具,脚本会自动编译并安装NAM。

  5. 编译和安装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文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

posted @ 2023-02-15 10:53  有梦-  阅读(30)  评论(0编辑  收藏  举报