こんにちは
これが初投稿となります.
#この記事について
ns2-2.35をクリーンなUbuntu16.04にインストールする際に起こりうるエラーについての忘備録です.
基本的にエラーメッセージを理解することができれば,この記事は必要ないでしょう.
初めてNS2やUbuntuに触れる人向けかもしれません.
#Ubuntu 10.04でも確認しました.
#起こりうる3つのエラー
インストールコマンドを叩くと,パッケージ不足起因のエラーが2つ,コードの間違い起因のエラーが1つ起こりうる.
- パッケージ不足
- libx11が無い
- xorgが無い
- コードの間違い
libx11が無い
###エラーログ
./ns-allinone-2.35/tk8.5.10/unix/../generic/tk.h:76:23: fatal error: X11/Xlib.h: そのようなファイルやディレクトリはありません
compilation terminated.
make: *** [tk3d.o] エラー 1
tk8.5.10 make failed! Exiting ...
For problems with Tcl/Tk see http://www.scriptics.com
###解決策
libx11をインストールする.
ターミナルを開き,下記コマンドを実行する.
apt-getが使えない場合は,代わりにaptを使用する.
$sudo apt-get install libx11-dev
##xorgが無い
###エラーログ
checking for X11 header files
can't find X includes
otcl-1.14 configuration failed! Exiting ...
Please check http://www.isi.edu/nsnam/ns/ns-problems.html
###解決策
xorgをインストールする.
ターミナルを開き,下記コマンドを実行する.
$sudo apt-get install xorg-dev
##コードの間違い
公式サイトで配布されているNS2のパッケージは,コードが1箇所間違ったまま配布されているため,修正する必要がある.
###エラーログ
linkstate/ls.cc:396:28: required from here
linkstate/ls.h:137:20: error: ‘erase’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
linkstate/ls.h:137:20: note: declarations in dependent base ‘std::map, std::allocator<std::pair > >’ are not found by unqualified lookup
linkstate/ls.h:137:20: note: use ‘this->erase’ instead
make: *** [linkstate/ls.o] エラー 1
Ns make failed!
See http://www.isi.edu/nsnam/ns/ns-problems.html for problems
###解決策
ソースコードの修正を行う.
ns-allinone-2.35/ns-2.35/linkstateにあるls.hをテキストエディタで開く.
137行目付近の
void eraseAll() { erase(baseMap::begin(), baseMap::end()); }
のeraceの前に
this->
を挿入する.
void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); }
#最後に
使い慣れてくるとエラーメッセージの意味もすぐにわかるようになりますが,初めてインストールする時には困ったものでした.