說在前面
- 根據自己Ubuntu版本,選擇相應的ns3版本
- 比如我是Ubuntu20.04,選擇的是ns3 3.30.1,之前選擇了ns3 3.26,在進行./build時會發生如下問題

- 參考task in 'ns3-wifi' failed或者‘ns3-network‘ failed錯誤后更改了下載對象,就這個折騰來回快一天
- 安裝ns3的時候,命令全部加sudo
安裝參考
- 最初參考的是這篇Ubuntu下的NS3安裝與入門,因為前面說的那個報錯解決不了,最后選擇了參考官方說明文檔安裝
- 官方說明文檔
安裝說明
- 官方說明文檔前面都是廢話,從第三部分開始有用,但是也包含很多廢話
首先安裝依賴,依賴網址,可以從官方說明文檔的這個位置找到這個網址

- 在依賴網址的下圖的位置開始才是Ubuntu系列的安裝方法

- 他里面有說明哪些版本的Ubuntu分別需要安裝什么東西,看仔細一些,當然如果偷懶,也可以直接全下,但記得下載全部要sudo
- 我的依賴安裝時,
apt install python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev ipython這個依賴是無法安裝的,提示英文版“無法定位本地可用包”,因為這個是在下載可視化軟件,因此使用NetAnim代替 - 依賴都安裝完以后不要點擊jump to installation,也不要去做依賴網址里面的installation部分的內容,這時候要回到官方說明文檔

回到官方說明文檔之后,直接快進到3.2.1,只做3.2.1

- 圖中第一塊指令在創建一個叫workspace的文件夾,然后進入文件夾,然后在文件夾里面wget下載ns3相應版本的壓縮包,然后解壓
- 圖中第二塊指令要先進入 ns-allinone-3.xx 文件夾,才用ls查看這個文件里面有什么,可以比對一下,基本是沒有問題
- 除了官方說明文檔里面的wget下載方式,也可以直接到ns3 download,點擊黃色的ns-allinone-3.30.1就可以下載壓縮包,然后跟官方說明文檔里面一樣解壓操作,ls就可以了。

編譯ns3,直接繼續快進到3.3,只做3.3.1

- 注意:他這個
./build.py --enable-examples --enable-tests的兩個--以及后面的內容也要復制到終端執行 - 繼續快進到3.3.3

- 執行
./waf clean和./waf configure --build-profile=optimized --enable-examples --enable-tests兩條指令,結果可以和官方說明文檔里面給出的比對一下,是不是正確安裝了。 - 這一步,看到他的sorry了嗎?我承認我一開始沒看到。

- 這個是把waf清空,再編譯一遍,編譯的這個過程要等比較久。
- 看到sorry的朋友,執行完
./waf clean和./waf configure --build-profile=optimized --enable-examples --enable-tests以后,3.3.3剩下內容不用做了,可以繼續快進到3.4
測試

- 執行
./test.py -c core,然后結果和官方說明文檔里面給出的比對一下,是不是正確。
樣例
- 比對完就可以到3.5了

- 看見Congratulations了嗎?勝利在前方!
- 執行
./waf --run hello-simulator如果出現Hello Simulator,那么Congratulations! - 如果沒有看到,官方說明文檔也有給出解決方案,即

- 跑完這倆,再跑一次
./waf --run hello-simulator就有了
總結
- 來來回回折騰一天,根本原因是ns3版本和Ubuntu版本不匹配,這是萬萬沒想到的,這個過程因為誤會了./build出不來結果的原因,而學到了一些其他知識:
- Linux cannot remove 'XXX': Is a directory 解決辦法,我是用了rm -rf temp這種類型
- 如何在Ubuntu中創建文檔,我是用了touch
- Ubuntu安裝gcc3.4並添加到備選項里,Ubuntu 20.04(64位)如何配置gcc-3.4用於編譯linux-0.11,這是當時以為./build出不來是因為gcc等級太高,就要給他降級而下的gcc3.4和g++3.4,一般第一個教程就可以解決了,一般用不上第二個。
- gcc、g++版本降級
- apt-get update ,upgarde 和dist-upgrade 的區別
- 出現og.h:323:44: error: ambiguous overload for ‘operator<<’ (operand types are ‘ns3::ParameterLogger’ and ‘ns3::FatalImpl::{anonymous}::destructor*’)報錯,考慮用python2來編譯
- 以及之前發的博客的那一部分
