官方安装教程:https://www.nsnam.org/wiki/Installation
推荐使用Ubuntu18.04,Ubuntu20.04有些依赖无法下载。
准备工作
# 如果下载速度很慢,可以更换源 sudo sed -i 's#archive.ubuntu.com#mirrors.aliyun.com#g' /etc/apt/sources.list # 下面的一定要执行 sudo apt update sudo apt upgrade
安装 ns3 所需要的依赖环境
# Ubuntu18.04 下依赖都能安装 sudo apt-get install g++ python3 sudo apt-get install g++ python3 python3-dev pkg-config sqlite3 sudo apt-get install python3-setuptools git sudo apt-get install qt5-default mercurial sudo apt-get install gir1.2-goocanvas-2.0 python-gi python-gi-cairo python-pygraphviz python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython ipython3 sudo apt-get install openmpi-bin openmpi-common openmpi-doc libopenmpi-dev sudo apt-get install autoconf cvs bzr unrar sudo apt-get install gdb valgrind sudo apt-get install uncrustify sudo apt-get install doxygen graphviz imagemagick sudo apt-get install texlive texlive-extra-utils texlive-latex-extra texlive-font-utils dvipng latexmk sudo apt-get install python3-sphinx dia sudo apt-get install gsl-bin libgsl-dev libgsl23 libgslcblas0 sudo apt-get install tcpdump sudo apt-get install sqlite sqlite3 libsqlite3-dev sudo apt-get install libxml2 libxml2-dev sudo apt-get install cmake libc6-dev libc6-dev-i386 libclang-6.0-dev llvm-6.0-dev automake sudo apt install python3-pip sudo pip3 install --upgrade pip python3 -m pip install --user cxxfilt sudo apt-get install libgtk-3-dev sudo apt-get install vtun lxc uml-utilities sudo apt-get install libboost-signals-dev libboost-filesystem-dev # 建议安装完,copy全部,再执行一遍,看有没有漏掉的。
下载源文件并进行解压安装
下载地址:https://www.nsnam.org/releases/
tar xjf ns-allinone-3.31.tar.bz2 # 解压 chmod -R 777 ns-allinone-3.31 # 修改权限 ls cd ns-allinone-3.31 # 切换到解压目录下
./build.py --enable-examples --enable-test
输出如下
# Build NS-3 Entering directory `./ns-3.31' => /usr/bin/python3 waf configure clean --with-pybindgen ../pybindgen-0.21.0 Setting top to : /home/ns-allinone-3.31/ns-3.31 Setting out to : /home/ns-allinone-3.31/ns-3.31/build Checking for 'gcc' (C compiler) : /usr/bin/gcc Checking for cc version : 7.5.0 Checking for 'g++' (C++ compiler) : /usr/bin/g++ Checking for compilation flag -Wl,--soname=foo support : ok Checking for compilation flag -std=c++11 support : ok Checking boost includes : 1_65_1 Checking boost libs : ok Checking for boost linkage : ok Checking for program 'python' : /usr/bin/python3 Checking for python version >= 2.3 : 3.6.9 python-config : /usr/bin/python3-config Asking python-config for pyembed '--cflags --libs --ldflags --embed' flags : not found Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes Testing pyembed configuration : yes Asking python-config for pyext '--cflags --libs --ldflags' flags : yes Testing pyext configuration : yes Checking for compilation flag -fvisibility=hidden support : ok Checking for compilation flag -Wno-array-bounds support : ok Checking for pybindgen location : ../pybindgen-0.21.0 (given) Checking for python module 'pybindgen' : 0.21.0 Checking for pybindgen version : 0.21.0 Checking for code snippet : yes Checking for types uint64_t and unsigned long equivalence : no Checking for code snippet : no Checking for types uint64_t and unsigned long long equivalence : yes Checking for the apidefs that can be used for Python bindings : gcc-LP64 Checking for internal GCC cxxabi : complete Checking for python module 'pygccxml' : not found Checking for click location : not found Checking for program 'pkg-config' : /usr/bin/pkg-config Checking for 'gtk+-3.0' : yes Checking for 'libxml-2.0' : yes checking for uint128_t : not found checking for __uint128_t : yes Checking high precision implementation : 128-bit integer (default) Checking for header stdint.h : yes Checking for header inttypes.h : yes Checking for header sys/inttypes.h : not found Checking for header sys/types.h : yes Checking for header sys/stat.h : yes Checking for header dirent.h : yes Checking for header signal.h : yes Checking for header pthread.h : yes Checking for header stdint.h : yes Checking for header inttypes.h : yes Checking for header sys/inttypes.h : not found Checking for library rt : yes Checking for header sys/ioctl.h : yes Checking for header net/if.h : yes Checking for header net/ethernet.h : yes Checking for header linux/if_tun.h : yes Checking for header netpacket/packet.h : yes Checking for NSC location : not found Checking for OpenFlow location : not found Checking for 'sqlite3' : yes Checking for header semaphore.h : yes Checking for header linux/if_tun.h : yes Checking for python module 'gi' : 3.26.1 Checking for python module 'gi.repository.GObject' : ok Checking for python module 'cairo' : ok Checking for python module 'pygraphviz' : 1.4rc1 Checking for python module 'gi.repository.Gtk' : ok Checking for python module 'gi.repository.Gdk' : ok Checking for python module 'gi.repository.Pango' : ok Checking for python module 'gi.repository.GooCanvas' : ok Checking for program 'sudo' : /usr/bin/sudo Checking for program 'valgrind' : /usr/bin/valgrind Checking for 'gsl' : yes libgcrypt-config : not found Checking for compilation flag -fstrict-aliasing support : ok Checking for compilation flag -fstrict-aliasing support : ok Checking for compilation flag -Wstrict-aliasing support : ok Checking for compilation flag -Wstrict-aliasing support : ok Checking for program 'doxygen' : /usr/bin/doxygen ---- Summary of optional NS-3 features: Build profile : debug Build directory : BRITE Integration : not enabled (BRITE not enabled (see option --with-brite)) DES Metrics event collection : not enabled (defaults to disabled) Emulation FdNetDevice : enabled Examples : not enabled (defaults to disabled) File descriptor NetDevice : enabled GNU Scientific Library (GSL) : enabled Gcrypt library : not enabled (libgcrypt not found: you can use libgcrypt-config to find its location.) GtkConfigStore : enabled MPI Support : not enabled (option --enable-mpi not selected) NS-3 Click Integration : not enabled (nsclick not enabled (see option --with-nsclick)) NS-3 OpenFlow Integration : not enabled (OpenFlow not enabled (see option --with-openflow)) Network Simulation Cradle : not enabled (NSC not found (see option --with-nsc)) PlanetLab FdNetDevice : not enabled (PlanetLab operating system not detected (see option --force-planetlab)) `PyViz visualizer : enabled` Python API Scanning Support : not enabled (Missing 'pygccxml' Python module) Python Bindings : enabled Real Time Simulator : enabled SQLite stats support : enabled Tap Bridge : enabled Tap FdNetDevice : enabled Tests : not enabled (defaults to disabled) Threading Primitives : enabled Use sudo to set suid bit : not enabled (option --enable-sudo not selected) XmlIo : enabled 'configure' finished successfully (5.788s) 'clean' finished successfully (0.016s)
重点关注下列输出,涉及到能否支持Python。
Python API Scanning Support : not enabled (Missing 'pygccxml' Python module) Python Bindings : enabled
pip3 install pygccxml
cd ns-3.31 ./waf --build-profile=debug --enable-examples --enable-test configure
pip3 install CastXML #安装好后,重启一下。
./test.py #问题解决了,继续安装 ./waf --run hello-simulator # 验证是否安装成功
其它问题
pip3 install PyBindGen