ネットワークシミュレータのデファクト「ns-2」のインストール時のトラブル解決方法をご紹介.手順書通りにやってもエラーが出ますので,そんな時にはこちらを参考にしていただければと思います.
気が向いたら,Agentの作り方やNodeの作り方などオリジナルプロトコル作成時のコツを書きますね.
FreeBSD 8.2 (g++ 4.2.1)で,ns-2.34 かns-2.35を動かす場合
- コンパイル時にエラー発生
aomdv/aomdv.cc: In member function 'void AOMDV::recvReply(Packet*)':
aomdv/aomdv.cc:1197: error: 'AF_INET' was not declared in this scope
gmake: *** [aomdv/aomdv.o] Error 1
Ns make failed!
See http://www.isi.edu/nsnam/ns/ns-problems.html for problems
「AF_INETの定義がない」と怒られますので,定義してあるヘッダ(sys/socket.h)をコンパイルエラーとなったソースファイル(aomdv/aomdv.cc)に追加
//#include <ip.h>
#include <sys/socket.h> ←これを追記
#include <aomdv/aomdv.h>
で,再コンパイル.
> cd ns-2.35; gmake
FreeBSDのmakeは標準ではgnuのライブラリを使わないヤツなのでエラーが起きます.
gmakeとして明示的にgnuを使うようにしてあげましょう.
モバイルやらマルチキャストやらのモジュールでテストエラーが出ますが,当該モジュールを使わない方は無視しても問題ありません.
ちなみに,インストール成功後,画面にも表示されますが,環境変数の設定が必要となります.私の場合は,こんな感じ.
set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local\
/bin $HOME/bin /usr/home/osada/ns-allinone-2.35/bin /usr/home/osada/ns-allinone\
-2.35/tcl8.5.10/unix /usr/home/osada/ns-allinone-2.35/tk8.5.10/unix)
setenv LD_LIBRARY /usr/home/osada/ns-allinone-2.35/otcl-1.14:/usr/home/osada/ns\
-allinone-2.35/lib
setenv TCL_LIBRARY /usr/home/osada/ns-allinone-2.35/tcl8.5.10/library
Ubuntu11.10の場合
- tkインストール時のエラーの対応
> sudo apt-get update
> sudo apt-get install autoconf automake libxmu-dev build-essential
> tar zxvf ns-allinone-2.35.tar.gz
> cd ns-allinone-2.35
> ./install
x関係のライブラリが標準では入っていないようです.上記コマンドで,必要なライブラリをインストールします.
共通
- 中間クラスを修正するときの注意
Agent/TCP/NewrenoやAgent/TCP/RenoなどのスーパークラスであるAgent/TCPを修正する場合,修正するクラス以外に,サブクラスについてもそれぞれ再コンパイルすること.
そうしなければ,オブジェクト間リンクがうまく機能せず,実行時エラーになるか,うまく動作しなくなりますので注意.
予告
ns-3も,色々エラーが出るので,それもそのうち書きます.そのうち.