Ubuntu10.04下安装Ns2的一系列错误及解决方案
安裝之前改一下nam1.11下的agent.h文件73行 Null改為0
第一個錯誤:
xxx configuration:
Syntax error: Unterminated quoted string,
tcl,tk,otcl安裝時都會遇到這個問題(原因是gcc對語法要求更加嚴格)。
解決辦法:
分別進入以下3個文件夾:
*/ns-allinone-2.29/tcl8.4.11/unix/
*/ns-allinone-2.29/tcl8.4.11/tk8.4.11/unix/
*/ns-allinone-2.29/otcl-1.11/
gedit進入configure文件 搜索 "relid" 找到全部 ".relid'`" 改為?".relid`"
?
?
第二個錯誤:
make: *** [tk3d.o] 錯誤 1
解決辦法:
安裝libx11-dev可以解決問題(可使用新立德)
?
第三個錯誤:
checking for X... configure: error: Can't find X includes
解決辦法:
sudo apt-get install xorg-dev
?
第四個錯誤:
make:***[libotcl.so] 錯誤1
otcl- make failed! Exiting...
解決辦法:
在gcc 4.0版本以前是用ld -share來生成共享庫,但是到了4.0以及以上版本,這個命令改為了gcc -share。好了,問題找到了,就知道該怎么處理了。
進入otcl-1.13目錄,找到configure.in.因為我用的是Ubuntu,所以只改Linux平臺部分就得,
將77行,
SHLIB_LD="ld -shared"
改為
SHLIB_LD="gcc -shared"
同時修改configure 第5518行
SHLIB_LD="ld -shared"
改為
SHLIB_LD="gcc -shared"
?
第五個錯誤:
make: g++:命令未找到
make: *** [tcl2c++] 錯誤 127
tclcl- make failed! Exiting ...
解決辦法:
sudo apt-get install g++
?
第六個錯誤:
Tcl.cc:605: warning: deprecated conversion from string constant to ‘char*’
make: *** [Tcl.o]?錯誤?1
tclcl-1.18 make failed! Exiting ...?
由于gcc版本過高引起的編譯問題?gcc-4.4??--> gcc-4.3
?1. sudo apt-get install gcc-4.3
?
但是這時系統默認的GCC還是4.4版的,可以通過gcc -v查看版本號?
設置GCC4.3和GCC4.4的可選項,在終端輸入以下命令?
???1.??sudo?update-alternatives?--install?/usr/bin/gcc?gcc?/usr/bin/gcc-4.4?40
???2.? sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 30??
現在設置GCC的默認版本,輸入下面命令:?
sudoupdate-alternatives --config gcc??
我得到的結果:??
There are 2choices for the alternative gcc (providing /usr/bin/gcc).?
??Selection???Path??????????????Priority???Status?
------------------------------------------------------------
* 0????????????/usr/bin/gcc-4.4???40???????auto mode?
??1???????????/usr/bin/gcc-4.3???30????????manual mode?
??2???????????/usr/bin/gcc-4.4???40????????manual mode?
然后輸入“1”,再查看一下gcc的版本,已經變成4.3的了~~~~?
同樣對于g++也可以使用同樣的方法從4.4高版本切換到4.3低版本。。。
?
由于我按照上述步驟裝了gcc-4.3的不行,又裝了gcc-4.1的仍然不行,于是就干脆進到tclcl-1.18文件夾下查找原因,最終發現的確因為是編譯器版本過高引起的,但是是由于g++版本過高,而不是gcc,解決步驟如下:
1. sudo apt-get install g++-4.1
2. ls /usr/bin/g++*
得到結果:
/usr/bin/g++? /usr/bin/g++-4.1? /usr/bin/g++-4.4
3. update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 40
4. update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.1 30
5. sudo update-alternatives --config g++
得到結果:
? Selection??? Path????????????? Priority?? Status
------------------------------------------------------------
* 0??????????? /usr/bin/g++-4.4?? 40??????? auto mode
? 1??????????? /usr/bin/g++-4.1?? 30??????? manual mode
? 2??????????? /usr/bin/g++-4.4?? 40??????? manual mode
選擇1即可
?
第7個錯誤:
./sctp/sctp.h:630: error: extra qualification ‘SctpAgent::’ on member ‘DumpSendBuffer’
make: *** [trace/trace.o] 錯誤 1
Ns make failed!
解決辦法:
去掉
/sctp/sctp.h下的 ‘SctpAgent::’
?
第8個錯誤:
make:?***?[src_rtg/sragent.o]?錯誤?1
Ns?make?failed!
$gedit?/usr/NS2/ns-allinone-2.27/ns-2.27/mobile/god.h
inline?void?vector::operator=(const?vector?a)
inline?void?vector::operator+=(const?vector?a)
inline?int?vector::operator==(const?vector?a)
inline?int?vector::operator!=(const?vector?a)
改為:
inline?void?operator=(const?vector?a)
inline?void?operator+=(const?vector?a)
inline?int?operator==(const?vector?a)
inline?int?operator!=(const?vector?a)
?
需要修改的文件:
問題:
./sctp/sctp.h:632: 錯誤:有多余的限定‘SctpAgent::’在成員‘DumpSendBuffer’上trace/trace.cc:185: 警告:不建議使用從字符串常量到‘char*’的轉換
trace/trace.cc:185: 警告:不建議使用從字符串常量到‘char*’的轉換
trace/trace.cc:185: 警告:不建議使用從字符串常量到‘char*’的轉換
trace/trace.cc:185: 警告:不建議使用從字符串常量到‘char*’的轉換
trace/trace.cc:185: 警告:不建議使用從字符串常量到‘char*’的轉換
make: *** [trace/trace.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/sctp/sctp.h void SctpAgent::DumpSendBuffer(); 改為: void DumpSendBuffer(); 問題:解決:
./mobile/god.h: At global scope:
./mobile/god.h:88: 錯誤:有多余的限定‘vector::’在成員‘operator=’上
./mobile/god.h:93: 錯誤:有多余的限定‘vector::’在成員‘operator+=’上
./mobile/god.h:98: 錯誤:有多余的限定‘vector::’在成員‘operator==’上
./mobile/god.h:101: 錯誤:有多余的限定‘vector::’在成員‘operator!=’上
make: *** [src_rtg/sragent.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/mobile/god.h inline void vector::operator=(const vector a)
inline void vector::operator+=(const vector a)
inline int vector::operator==(const vector a)
inline int vector::operator!=(const vector a) 改為: inline void operator=(const vector a)
inline void operator+=(const vector a)
inline int operator==(const vector a)
inline int operator!=(const vector a) 問題:
queue/cbq.cc:112: 錯誤:ISO C++ 不允許聲明無類型的‘CBQueue’
queue/cbq.cc:112: 錯誤:expected ‘;’ before ‘*’ token
queue/cbq.cc: In member function ‘virtual int CBQueue::insert_class(CBQClass*)’:
queue/cbq.cc:488: 錯誤:‘class CBQClass’沒有名為‘cbq_’的成員
queue/cbq.cc: In constructor ‘CBQClass::CBQClass()’:
queue/cbq.cc:805: 錯誤:類‘CBQClass’沒有名為‘cbq_’的字段
queue/cbq.cc: In member function ‘virtual void CBQClass::recv(Packet*, Handler*)’:
queue/cbq.cc:850: 錯誤:‘cbq_’在此作用域中尚未聲明
queue/cbq.cc:856: 錯誤:‘cbq_’在此作用域中尚未聲明
queue/cbq.cc: In member function ‘void CBQClass::update(Packet*, double)’:
queue/cbq.cc:873: 錯誤:‘cbq_’在此作用域中尚未聲明
queue/cbq.cc: In member function ‘int CBQClass::desc_with_demand()’:
queue/cbq.cc:928: 錯誤:‘cbq_’在此作用域中尚未聲明
queue/cbq.cc: In member function ‘void CBQClass::newallot(double)’:
queue/cbq.cc:975: 錯誤:‘cbq_’在此作用域中尚未聲明
queue/cbq.cc: In member function ‘virtual int CBQClass::command(int, const char* const*)’:
queue/cbq.cc:1002: 錯誤:‘cbq_’在此作用域中尚未聲明
make: *** [queue/cbq.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/queue/cbq.cc #define POWEROFTWO 16
+class CBQueue;
class CBQClass : public Connector { 問題:
./tora/tora_neighbor.h:72: 錯誤:ISO C++ 不允許聲明無類型的‘toraAgent’
./tora/tora_neighbor.h:72: 錯誤:expected ‘;’ before ‘*’ token
tora/tora.cc: In member function ‘void toraAgent::rt_resolve(Packet*)’:
tora/tora.cc:238: 警告:不建議使用從字符串常量到‘char*’的轉換
tora/tora.cc: In member function ‘void toraAgent::recvUPD(Packet*)’:
tora/tora.cc:462: 警告:不建議使用從字符串常量到‘char*’的轉換
tora/tora.cc: In member function ‘void toraAgent::recvCLR(Packet*)’:
tora/tora.cc:648: 警告:不建議使用從字符串常量到‘char*’的轉換
make: *** [tora/tora.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/tora/tora_neighbor.h #define __tora_neighbor_h__
+class toraAgent;
enum LinkStatus { 問題:
dsr/dsragent.cc:787: 錯誤:‘XmitFlowFailureCallback’在此作用域中尚未聲明
dsr/dsragent.cc:1344: 錯誤:‘XmitFailureCallback’在此作用域中尚未聲明
make: *** [dsr/dsragent.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/dsr/dsragent.cc +void XmitFlowFailureCallback(Packet *pkt, void *data);
+void XmitFailureCallback(Packet *pkt, void *data); /*===========================================================================
SendBuf management and helpers 問題: diffusion/diffusion.cc:404: 錯誤:‘XmitFailedCallback’在此作用域中尚未聲明
make: *** [diffusion/diffusion.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/diffusion/diffusion.cc #include "routing_table.h"
+void XmitFailedCallback(Packet *pkt, void *data);
char *MsgStr[]= {"", "INTEREST", "DATA", "DATA_READY", "DATA_REQUEST", 問題: diffusion/omni_mcast.cc:367: 錯誤:‘OmniMcastXmitFailedCallback’在此作用域中尚未聲明
make: *** [diffusion/omni_mcast.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/diffusion/omni_mcast.cc
#include "god.h"
+void OmniMcastXmitFailedCallback(Packet *pkt, void *data);
static class OmniMcastClass : public TclClass { 問題: tcp/tcp-sack-rh.cc:68: 錯誤:有多余的限定‘SackRHTcpAgent::’在成員‘newack’上
make: *** [tcp/tcp-sack-rh.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/tcp/tcp-sack-rh.cc virtual void computefack();
//virtual void SackRHTcpAgent::newack(Packet* pkt);
+virtual void newack(Packet *pkt); 問題: pgm/pgm-agent.cc:278: 錯誤:有多余的限定‘PgmAgent::’在成員‘trace_event’上
pgm/pgm-agent.cc: In member function ‘void PgmAgent::handle_rdata(Packet*)’:
pgm/pgm-agent.cc:578: 警告:不建議使用從字符串常量到‘char*’的轉換
pgm/pgm-agent.cc: In member function ‘void PgmAgent::handle_nak(Packet*)’:
pgm/pgm-agent.cc:727: 警告:不建議使用從字符串常量到‘char*’的轉換
pgm/pgm-agent.cc: In member function ‘void PgmAgent::handle_ncf(Packet*)’:
pgm/pgm-agent.cc:824: 警告:不建議使用從字符串常量到‘char*’的轉換
make: *** [pgm/pgm-agent.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/pgm/pgm-agent.cc void print_stats();
-//void PgmAgent::trace_event(char *evType, double evTime);
+void trace_event(char *evType, double evTime); 問題:
pgm/pgm-sender.cc:160: 錯誤:有多余的限定‘PgmSender::’在成員‘trace_event’上
pgm/pgm-sender.cc: In member function ‘virtual void PgmSender::handle_nak(Packet*)’:
pgm/pgm-sender.cc:472: 警告:不建議使用從字符串常量到‘char*’的轉換
pgm/pgm-sender.cc: In member function ‘virtual void PgmSender::send_rdata(RdataItem*)’:
pgm/pgm-sender.cc:619: 警告:不建議使用從字符串常量到‘char*’的轉換
make: *** [pgm/pgm-sender.o] 錯誤 1
Ns make failed! 解決:
$gedit /usr/NS2/ns-allinone-2.27/ns-2.27/pgm/pgm-sender.cc -//void PgmSender::trace_event(char *evType, nsaddr_t daddr, double evTime);
+void trace_event(char *evType, nsaddr_t daddr, double evTime); 問題:
pgm/pgm-receiver.cc:157: 錯誤:有多余的限定‘PgmReceiver::’在成員‘trace_event’上
pgm/pgm-receiver.cc: In member function ‘void PgmReceiver::generate_Nak(int)’:
pgm/pgm-receiver.cc:589: 警告:不建議使用從字符串常量到‘char*’的轉換
make: *** [pgm/pgm-receiver.o] 錯誤 1
Ns make failed! 解決:
$gedit /usr/NS2/ns-allinone-2.27/ns-2.27/pgm/pgm-receiver.cc -void PgmReceiver::trace_event(char *evType, double evTime);
+void trace_event(char *evType, double evTime); 問題:
./diffusion3/filter_core/filter_core.hh:111: 錯誤:expected `)' before ‘*’ token
make: *** [diffusion3/ns/diffagent.o] 錯誤 1
Ns make failed! 解決: $gedit /usr/NS2/ns-allinone-2.27/ns-2.27/diffusion3/filter_core/filter_core.hh
class NeighborEntry;
+class DiffRoutingAgent;
typedef list<NeighborEntry *> NeighborList;
成功
轉載于:https://www.cnblogs.com/liuxiaoke/p/3488616.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Ubuntu10.04下安装Ns2的一系列错误及解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初探弹出层的实现原理
- 下一篇: 求方程解问题