安裝事項(xiàng)
- 流程就按照官網(wǎng)給的裝機(jī)流程一步一步做
需要注意的點(diǎn)
- linux的依賴關(guān)系搞起來很煩。根據(jù)ns3的版本需要安裝不同版本的依賴庫。太低版本的不行,太高版本的也不行。有的你按照官網(wǎng)流程安裝會發(fā)現(xiàn)系統(tǒng)提示你根本沒有這個(gè)安裝包。
- 我選用的是ubuntu 20.04,ns是3.30的,安裝時(shí)有幾個(gè)包是遠(yuǎn)遠(yuǎn)超前于安裝教程的。注意不要選的太新。有幾個(gè)包如果直接用·apt-get·安裝會安裝最新的版本,然后你就發(fā)現(xiàn)其他老的包裝不上了。所以安裝的時(shí)候要多按幾下自動(dòng)補(bǔ)全(tab鍵),看看都有什么版本的可以安裝。
- 有些包安裝教程上直接給的是具體的版本號,可能已經(jīng)太老了,你安裝的時(shí)候發(fā)現(xiàn)系統(tǒng)提示你沒有這個(gè)包,這時(shí)就必須安裝稍微新一點(diǎn)的。所以特別注意依賴包中的數(shù)字,它代表著版本號。靈活一點(diǎn),不一定非要跟他一模一樣。
- 這個(gè)時(shí)候是python3和python2的過渡期,ns3.30是使用python3的,這方面出現(xiàn)問題的時(shí)候試試是不是版本問題
- 記得換源, 安裝教程有一步是使用
pip安裝一個(gè)python包cxxflit(好像是這個(gè)), 注意這個(gè)pip是python3的,所以正確的應(yīng)該是pip3 install xxxx, pip源很慢,記得把pip的源也換了, 然后中科大的源換地址了,用清華的源。 - 安裝ns3時(shí)給ubuntu的內(nèi)存分配至少要4GB的內(nèi)存, 否則你就會發(fā)現(xiàn)編譯著就不動(dòng)了,然后ubuntu也很卡??梢杂胻op命令看看內(nèi)存夠不夠。因?yàn)榫幾g過程有一兩個(gè)小時(shí)左右。硬件不好花費(fèi)的時(shí)間可能更長。
其他的沒什么要注意了,linux安裝東西很靈活,但也意味著同樣的代碼可能過一段時(shí)間就因?yàn)楦露荒苤貜?fù)再用了。這點(diǎn)很關(guān)鍵。
編譯和測試waf
使用Python編寫ns3腳本的問題
ns3.30可以支持python編寫腳本。但不是100%兼容的。使用python編寫的需要注意,
- 如果出現(xiàn)
pybindgen in core ... time.clock()這樣的錯(cuò)誤是因?yàn)閜ython3.8版本已經(jīng)刪除了time.clock()這個(gè)屬性,他的功能用time.perf_counter()替代。解決辦法有兩個(gè),一個(gè)是裝Python3.7。另一個(gè)是把所有使用time.clock()的地方替換為time.perf_counter(),注意更改的地方可能是other.clock() - time.clock()這樣的形式, 注意把兩個(gè)都改了??偣泊蟾攀?個(gè)文件,加起來不到10處,也不太麻煩。 - 另一個(gè)地方是這樣的報(bào)錯(cuò)
Nonetype '<' Nonetype這樣的。忘了具體的文字,差不多是這個(gè)格式,反正意思是None類型不能和None類型作比較,所以發(fā)生了錯(cuò)誤。這個(gè)也是Python3的新定義。python3明確了不同的類型不能互相比較,比如None不能和int比較, None也不能和None比較。 python2中這是可以的。所以此處還是改源代碼。源代碼要改的地方好像是在return的那個(gè)位置做了個(gè)比較然后返回。往上翻翻能看到他是賦了一個(gè)None值,所以把這個(gè)return地方的比較改了就行。 怎么改 : 在python2中把None和None和int類型的都比較了,看看比較的邏輯。然后把這個(gè)比較邏輯用單行的if-else語句實(shí)現(xiàn), 最后用這句把return里那個(gè)比較替換掉就可以了。
能用這個(gè)軟件的,至少都有編程功底,所以我就不放代碼了,因?yàn)槲彝宋募恢昧?,總之很簡單的if-else邏輯。
運(yùn)行和配置時(shí)的注意問題
按照安裝教程安裝成功后,應(yīng)該已經(jīng)能運(yùn)行hello-simulator了,python腳本沒有什么問題應(yīng)該也可以了。
- waf的配置方式是, 先運(yùn)行
./waf 命令, 然后再運(yùn)行一次./waf才會生效 - 如果在運(yùn)行例子時(shí),發(fā)現(xiàn)提示
program not found,可能原因有兩個(gè),一個(gè)是沒有使能例子,例子默認(rèn)是關(guān)閉的,需要手動(dòng)開。第二個(gè)是程序名的問題, 運(yùn)行c++程序不要加.cc后綴,Python程序要加.py后綴。比如:
./waf --run examples/tutorial/first
./waf --pyrun examples/tutorial/first.py