fedora10系统gcc4.3.0下安装ns-2.29记录:
./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!
./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!
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 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!
+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!
+class toraAgent;
enum LinkStatus {
dsr/dsragent.cc:787: 错误:‘XmitFlowFailureCallback’在此作用域中尚未声明
dsr/dsragent.cc:1344: 错误:‘XmitFailureCallback’在此作用域中尚未声明
make: *** [dsr/dsragent.o] 错误 1
Ns make failed!
+void XmitFailureCallback(Packet *pkt, void *data);
SendBuf management and helpers
diffusion/diffusion.cc:404: 错误:‘XmitFailedCallback’在此作用域中尚未声明
make: *** [diffusion/diffusion.o] 错误 1
Ns make failed!
+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!
#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!
//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!
-//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!
+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!
+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!
+class DiffRoutingAgent;
typedef list<NeighborEntry *> NeighborList;
设置环境:
我把ns-allinone-2.29放到了$home/MaXL下,设置环境变量:
NSPATH=$home/MaXL/ns-allinone-2.29
PATH=$NSPATH/bin:$NSPATH/tcl8.4.11/unix:$NSPATH/tk8.4.11/unix:$PATH
LD_LIBRARY_PATH=$NSPATH/otcl-1.11:$NSPATH/lib
TCL_LIBRARY=$NSPATH/tcl8.4.11/library
export NSPATH PATH LD_LIBRARY_PATH TCL_LIBRARY
重新安装ns:
重新安装ns的话,只需要安装ns-x.xx就可以了,环境不需要重新安装
把ns-x.xx放到任意目录即可(如$HOME,ns-2.29),进入ns-x.xx,执行
$ ./configure --with-tcl=$NSPATH/tcl8.4.11 --with-otcl=$NSPATH/otcl-1.11 --
with-tclcl=$NSPATH/tclcl-1.17
$ make
设置环境
$ unlink $NSPATH/bin/ns
$ export PATH=$HOME/ns-x.xx:$PATH
就可以运行新安装的ns了
(2)问题解决
一般来说只要环境满足条件,安装应该很顺利
但是也有遇到问题的时候
问题1:
checking system version (for dynamic loading)...
./configure: line 7624:syntax error near unexpected token `)'
./configure: line 7624: ` OSF*)'
tcl8.3.2 configuration failed! Exiting ...
Tcl is not part of the ns project.
解决办法:
在ns-allinone-x.xx目录下
$ grep 'system=MP-RAS-' */* -n
$ grep 'system=MP-RAS-' */*/* -n
$ grep 'system=MP-RAS-' */*/*/* -n
把那些文件里的
system=MP-RAS-`awk ' { print $3 } '/etc/.relid'`
改为:
system=MP-RAS-`awk ' { print $3 } '/etc/.relid`
也就是那行多了一个'号
问题2:
make: *** [tk3d.o] 错误 1
安装libx11-dev可以解决问题
问题3:
can't find X includes
otcl-1.11 configuration failed Exiting ...
安装x-window-system-dev可以解决问题
问题4:
make: g++:命令未找到
make: ***[tcl2c++]错误 127
tclcl-1.17 make failed! Exiting ...
安装g++
编译出错
1.如何去掉warning: assignment makes pointer from integer without a cast的警告
编写了段代码:
函数原形为:char *cfg_get(const char *name);
在main()中调用上述函数方式如下:
char *dev_IMEI = cfg_get((char *)"dm_imei");
但是此调用处编译出现warming如下:
warning: assignment makes pointer from integer without a cast
Final:
第一步:将/home/xly/ns-allinone-2.29/nam-1.11下的agent.h文件中的NULL改为0;
第二步:进入目录home/xly/ns-allinone-2.29/nam-1.11,然后运行命令(./configure && make && make install)后会在home/xly/ns-allinone-2.29/nam-1.11目录下生成一个nam.exe文件,把nam.exe文件拷贝到home/xly/ns-allinone-2.29/bin目录下。
一定要按照顺序来,首先用ultraedit打开第一步中的agent.h,在第73行改null为0。然后再运行第二步中的那串命令。命令的运行时间为几分钟,别管它。运行完了,检查nam-1.11文件夹下是否真有nam.exe文件,有,很好。接着,拷贝这个nam.exe到examples文件夹下。
如果:
ns: finish: couldn't execute "nam": such file or directory
while executing
"exec nam out.nam &"
(procedure "finish" line 7)
invoke from within
"finish"
则是nam.exe没有制作成功的问题,如果干脆是ns: command not found,则是没有将ns.exe和nam.exe拷贝过去的原因。