在Manjaro(Arch系)環境下編譯NS3以及啓用C++11

更新

  1. 必須安裝的依賴是pygccxml,不是pygccxml-svn
  2. manjaro庫裏面的pygccxml版本如果提示太舊(我安裝ns3-dev版本時遇到的),需要用pip或者easy_install安裝最新版本
  3. 如果一定要啓用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版本及以上不需要添加此前綴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章