zoukankan      html  css  js  c++  java
  • NS3中文教程:3下载及编译软件

    首先感谢此稿的翻译工作人员,正是因为他们的劳动才让我们这些初学者有捷径可取。

    3.1  下载ns-3
    从现在起,我们假定读者使用的工作环境为Linux或者仿Linux环境(Linux, Cygwin等等.) 并且已经安装了可用的GNU工具链,而且还安装了Mercurial(分布式版本控制系统)Waf软件。细节已经在ns-3网页中详述过,参见以下链接:
    http://www.nsnam.org/getting_started.html.
    ns-3源码可以在网站http://code.nsnam.org 上的Mercurial源码库下载到.你也可以从链接http://www.nsnam.org/releases/处下载一个tar格式压缩包,或者直接使用Mercurial源码库下载。除非有特殊需要,我们推荐使用Mercurial源码库下载。tar格式压缩包下载,请参见本节最后部分。最简单的方法就是使用Mercurial源码库下载一个ns-3-allinone压缩包,此压缩包内含一套脚本集来管理各种子系统下的ns-3下载和安装。我们推荐你使用这个压缩包来简化你的ns-3安装。
    3.1.1 使用Mercurial下载ns-3
    作为练习,我们首先在home目录下建立一个目录并取名为repos,用来存放本地Mercurial源码库,注意:在本教程随后内容中,我们假定你已经这样做了。如果使用如下的方法,可以在Linuxshell中下载到一份ns-3-allinone软件包(假定你已经安装了Mercurial):
    cd
    mkdir repos
    cd repos
     
    Mercurailhg命令执行后,可以看到如下结果:
    destination directory: ns-3-allinone
    requesting all changes
    adding changesets
    adding manifests
    adding file changes
    added 31 changesets with 45 changes to 7 files
    7 files updated, 0 files merged, 0 files removed, 0 files unresolved
     
    clone命令运行结束以后,在前述建立的repos目录下,会出现一个ns-3-allinone目录,而且含有如下文件:
    build.py*  constants.py  dist.py*  download.py*  README  util.py
    注意:你实际上仅仅下载了一些Python脚本,下一步就是利用这些脚本根据需要下载并来安装ns-3软件包。如果你访问如下链接:http://code.nsnam.org/ 就会发现若干源码库,其中很多是ns3开发团队专用的。其中在源码库org/ 你会发现名为ns-3.1的源码库,这是ns-3的第一个稳定版本。还有一些分散的源码库名为ns-3.1-reftraces它为ns-3.1保留了参考记录。保持这些文件的一致性是非常重要的,尤其是当你想对源码库做一个回归测试时。至少做一次测试来验证所有的程序都正确编译了。
    当前的开发版ns-3的快照存放在http://code.nsnam.org/ns-3-dev/;相关的参考记录存放在链接 http://code.nsnam.org/ns-3-dev-ref-traces/ns3开发人员会尽量保持源码库中的代码处于一致,工作的状态,但是他们仍在开发中,有一些未发布过的代码。所以如果你不需要最新的特性的话还是考虑使用发行版。
    由于发布版的版本号在变化中,我在指南中还是继续使用通常不变的ns-3-dev,但是你可以根据自己的需要选择其他的版本,并替换这里的ns-3-dev”,(例如, ns-3.6ns-3.6-ref-traces),在下文中,你可以通过访问源码库列表或者访问ns3开始网页找到最新的ns-3发布版软件。 
    当你从源码库下载完后,继续切换进入你自己建立的ns-3-allinone目录中。 我们现在使用download.py脚本来下载ns-3需要使用的各个部件。继续在你的shell中输入以下命令 (如果你想使用任意发行版你可以将ns-3-dev替换为你选择的发行版的名字,例如"ns-3.6" "ns-3.6-reftraces")
    ./download.py -n ns-3-dev -r ns-3-dev-ref-traces
    注意,-n选项的默认参数为ns-3-dev-r选项的默认参数为ns-3-dev-ref-traces所以上述命令中这两个选项的参数实际上是多余的。我们使用这个例子来描述如何指定源码库。你只需简单键入如下命令就可以使用默认参数来下载ns-3-dev
    ./download.py
    hg (Mercurial)命令执行时,你可以看到如下的信息:
    #
    # Get NS-3
    #
    Cloning ns-3 branch
    => hg clone http://code.nsnam.org/ns-3-dev ns-3-dev
    requesting all changes
    adding changesets
    adding manifests
    adding file changes
    Chapter 3: Getting Started 8
    added 4634 changesets with 16500 changes to 1762 files
    870 files updated, 0 files merged, 0 files removed, 0 files unresolved
    这些输出信息显示下载脚本已经从源码库中下载到了实际的ns-3源码,紧接着,你就会看到这样的信息:
    #
    # Get the regression traces
    #
    Synchronizing reference traces using Mercurial.
    => hg clone http://code.nsnam.org/ns-3-dev-ref-traces ns-3-dev-ref-traces
    requesting all changes
    adding changesets
    adding manifests
    adding file changes
    added 86 changesets with 1178 changes to 259 files
    208 files updated, 0 files merged, 0 files removed, 0 files unresolved
    这表明下载脚本为你下载了参考记录文件。下载脚本被设计成自适应的,它能检测在一些系统平台上某些ns-3模块不被支持,在你的系统平台上,你可能看不到这些系统不支持的源码被下载。然而,在大多数系统平台上这样的过程会显示如下:
    #
    # Get PyBindGen
    #
    Required pybindgen version: 0.10.0.640
    Trying to fetch  pybindgen; this will fail if no network connection is available. Hit Ctrl-=> bzr checkout -rrevno:640 https://launchpad.net/pybindgen pybindgen
    Fetch was successful.
    这些信息显示了下载脚本在为你下载Python绑定生成器的过程,下一步你就可能看到如下的信息(不同的系统平台表现有所不同)
    #
    # Get NSC
    #
    Required NSC version: nsc-0.5.0
    Retrieving nsc from https://secure.wand.net.nz/mercurial/nsc
    => hg clone https://secure.wand.net.nz/mercurial/nsc nsc
    requesting all changes
    adding changesets
    adding manifests
    adding file changes
    added 273 changesets with 17565 changes to 15175 files
    10622 files updated, 0 files merged, 0 files removed, 0 files unresolved
    这些信息显示了下载脚本在为你下载网络仿真器支架程序(NSC)的过程。
     
    当复制命令结束,你在~/repos/ns-3-allinone目录下会有几个新目录:
    build.py* constants.pyc download.py* ns-3-dev-ref-traces/ pybindgen/ util.py
    constants.py dist.py* ns-3-dev/ nsc/ README util.pyc
    继续进入ns-3-dev目录,你会见到如下的文件:
    AUTHORS examples/ regression/ scratch/ waf*
    bindings/ LICENSE regression.py src/ waf.bat*
    CHANGES.html ns3/ RELEASE_NOTES utils/ wscript
    doc/ README samples/ VERSION wutils.py
    现在可以准备编译ns-3软件了。
     
    3.1.2 使用Tarball下载ns-3
    使用tarball下载ns-3比使用Mercurail下载ns-3要简单一些,因为需要下载的各个部分都已经预先被打包在一个压缩包中了,你只需要选择一个发行版版本,下载并且解压就可以。如上所述,在Mercurial下载方法中,是在home目录下创建一个repos目录,保存本地Mercurial源码库。你也可以建立一个tarball目录来下载。(注意:本教程后面会假定你把它下载到了repoa目录,所以请留意这个选择)。如果你选择了tarballs方法下载,你可以键入如下命令来下载一份ns-3发行版 (当然,可以根据需要选择你想要的版本):
    cd
    mkdir tarballs
    cd tarballs
    wget http://www.nsnam.org/releases/ns-allinone-3.6.tar.bz2
    tar xjf ns-allinone-3.6.tar.bz2
    如果你切换到ns-allinone-3.6目录,你会看到下述文件:
    build.py* ns-3.6/ nsc-0.5.1/ README
    constants.py ns-3.6-ref-traces/ pybindgen-0.12.0.700/ util.py
    现在就可以编译ns-3软件包了。
     
    3.2 编译ns-3
     
    3.2.1 使用build.py编译
    如果你是第一次编译ns-3软件包,建议使用allinone环境,它会为你以最常用的方式配置工程。
    切换到你在上文下载一节中创建的目录下。如果你使用Mercurial下载,请进入~/repos目录下的ns-3-allinone目录,如果你使用tarball下载,找到~/tarballs目录下类似ns-allinone-3.6的目录,键入如下的命令,并请耐心等待:
    ./build.py
    编译脚本开始编译下载的ns3时,你会看到大量常见的编译器输入信息。最后你会看到如下编译成功的好消息:
    Waf: Leaving directory /home/craigdo/repos/ns-3-allinone/ns-3-dev/build
    build finished successfully (2m30.586s)
    一旦工程编译好,你就可以不再使用ns-3-allinone脚本包了。你已经从其中获取必要的东西,现在是你直接同Waf交互的时候了,它位于ns-3-dev目录中,并不在 ns-3-allinone目录中。切换到ns-3-dev目录下(或者你下载的版本的相应目录下)
    cd ns-3-dev
     
    3.2.2使用Waf编译
    我们使用waf来配置和编译ns-3工程软件包,这一点不是严格必须的,但是做一个简单的介绍是很有必要的,起码可以了解如何修改工程的配置。也许你能做出的最有用的配置修改就是编译工程的优化版本了,默认你会将你的工程编译为调试版本,让我们来使工程做出优化的编译。
    为了通知waf进行优化编译,你需要执行如下的命令:
    ./waf -d optimized configure
    这会Waf可能会切换到其他目录收集信息. 当编译系统检查各种依存关系时,你可以看到类似如下的输出结果:
    Checking for program g++ : ok /usr/bin/g++
    Checking for program cpp : ok /usr/bin/cpp
    Checking for program ar : ok /usr/bin/ar
    Checking for program ranlib : ok /usr/bin/ranlib
    Checking for g++ : ok
    (鉴于长度限制,省略)
    Checking for program valgrind : ok /usr/bin/valgrind
    ---- Summary of optional NS-3 features:
    Threading Primitives : enabled
    Real Time Simulator : enabled
    Emulated Net Device : enabled
    GNU Scientific Library (GSL) : enabled
    Tap Bridge : enabled
    GtkConfigStore : enabled
    XmlIo : enabled
    SQlite stats data output : enabled
    Network Simulation Cradle : enabled
    Python Bindings : enabled
    Python API Scanning Support : enabled
    Use sudo to set suid bit : not enabled (option --enable-sudo not selected)
    Build examples and samples : enabled
    Static build : not enabled (option --enable-static not selected)
    configure finished successfully (2.870s)
    需要注意输入的最后一部分。部分ns-3选项并不是默认的,需要底层系统的支持才能够顺利运行。例如:为了运行XmlTo, 系统必须安装libxml-2.0,如果没有发现这个库,相应的ns-3特性就不会被激活,这会以消息显示出来。另一个需要注意的地方是:对于一些特定的程序,需要使用sudo命令来设置该程序的。这个是默认设置为关的,所以此性质会显示出未激活,现在我们可以进一步返回到调试编译上来:
    ./waf -d debug configure
    此时编译系统被配置好,你可以编译ns-3程序的debug版本了,只需简单的命令如下:
    ./waf
    一些waf命令在编译阶段是很重要的,另一些命令是在配置阶段有用的,例如,如果你想使用ns-3的仿真(emaulation)特性,你一定要通过上述的sudo来设置用户标识位(suid为有效位。这将是一个配置命令,你可以使用如下命令通知Waf来重新设置:
    ./waf -d debug --enable-sudo configure
    如果你这样做,waf会运行sudoroot的权限来改变仿真代码的socket创建程序。在waf中还有许多其它的配置和编译选项可用。若要察看详细的选项,键入以下命令:
    ./waf --help
    我们将会在下一节中使用测试相关的命令。好的,你已经编译ns-3两遍了,现在你知道如何修改配置和编译优化代码了。
  • 相关阅读:
    CF1295D Same GCDs
    欧拉函数
    CF1509C The Sports Festival
    莫队学习笔记
    CF271D Good Substrings
    字符串
    P2704 [NOI2001] 炮兵阵地
    【洛谷 3399】丝绸之路
    【洛谷 3379】最近公共祖先
    【洛谷 2939】Revamping Trails G
  • 原文地址:https://www.cnblogs.com/lovemo1314/p/1951856.html
Copyright © 2011-2022 走看看