更新:
- 必须安装的依赖是pygccxml,不是pygccxml-svn
- manjaro库里面的pygccxml版本如果提示太旧(我安装ns3-dev版本时遇到的),需要用pip或者easy_install安装最新版本
- 如果一定要启用Python绑定的话,更加合适的操作是编译时指定Python版本,要不然因为manjaro系统包括一些管理工具使用的是Python3,会导致一些安装问题(比如castxml,在库中对应的名字castxml-git):
CXXFLAGS='-std=c++11' python2 ./waf configure --with-python=python2 --enable-examples --enable-tests --enable-sudo
———————————————————————————————————————————-
首先,编译NS3本身这事并不难,几个命令一敲就完事了,问题是不同的Linux发行版下的依赖包的名称不一样,在官方的NS3 Installtion指南中并未提供Manjaro(一个新生的Linux系统,确实好用,Arch衍生版)发行版的依赖包说明,无法安装依赖包就无法很好的编译常用模块。下面我们来说一下在Manjaro(或者Arch Linux)系统下如果要正常编译需要安装哪些必须的依赖:
pacman -S gsl gtk2 libxml2 sqlite boost boost-libs graphviz dia qt4 python2 python2-setuptools python2-pydot goocanvas pygoocanvas pygtk python2-pygraphviz pygccxml openmpi flex fakeroot findutils
以上是我认为正常使用编译常用模块所必须的一些依赖,如果你要分析pcap、tr文件,可以安装tcpdump、wireshark-gtk,如果你要调试可以安装gdb、valgrind(感觉用不到,从来没分析过),如果你要在本地阅读文档需要安装mercurial、bzr、texlive-bin、python2-sphinx、uncrustify。
安装完依赖之后就是编译,但是编译之前你需要做一点工作,进入ns3解压文件的目录,找到waf文件,用VIM或者编辑器打开,第一行:
#!/usr/bin/env python
改为指定Python2版本,因为manjaro无论什么软件一直用的都是最新的:
#!/usr/bin/env python2
或者
#!/usr/bin/python2
如果这样改在编译的时候遇到和Python相关的问题,可尝试如下方法:
rm /usr/bin/python
ln -s /usr/bin/python2 /usr/bin/python
编译完成之后:
rm /usr/bin/python
ln -s /usr/bin/python3 /usr/bin/python
如果不改回来,在使用manjaro的时候可能会遇到一些未知问题,而且你还不知道是由于什么原因导致的,这也是因为manjaro一直采用最新的软件版本,一些图形化的软件是调用的Python3的库,所以当你把默认的Python指向Python2时,软件就会出问题,而且没有任何提示(我就是在改了之后包管理器有个选择镜像源的功能无法使用)。
顺便提一下,NS3从3.26版本开始提供支持C++11的新特性,如果你正在使用的版本或者想使用的版本在这个之前又想启用C++11,你需要在编译的时候加上如下前缀:
CXXFLAGS="-std=c++11" ./waf configure
3.26版本及以上不需要添加此前缀。