Install NS2.29---problems collecting!

本文记录了在Fedora10系统和GCC4.3.0环境下安装ns-2.29过程中遇到的各种编译错误及解决方法,包括对sctp.h、god.h等文件的修改。
fedora10系统gcc4.3.0下安装ns-2.29记录:
1)
./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();
2)
./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)
3)
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 {
4)
./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 {
5)
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
6)
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",
7)
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 {
8)
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);
9)
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);
10)
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);
11)
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);
12)
./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;


 

设置环境:

我把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拷贝过去的原因。

这条命令是用于通过 `pip` 安装或更新几个与 ROS(Robot Operating System)相关的 Python 包,具体包括: 1. `rosinstall`:一个用于管理 ROS 工作空间的工具,允许用户通过单一命令安装或更新多个 ROS 软件包。 2. `empy`:一个模板系统,常用于生成代码,ROS 中用于生成 CMakeLists.txt、package.xml 等文件。 3. `defusedxml`:一个安全的 XML 解析库,用于防止 XML 外部实体注入攻击。 4. `netifaces`:一个用于获取网络接口信息的 Python 库。 ### 解释 - `pip install -U`:`pip` 是 Python 的包管理工具,`install` 表示安装包,`-U` 表示更新已安装的包到最新版本。 - `rosinstall empy defusedxml netifaces`:要安装或更新的包列表。 ### 执行过程 1. `pip` 会连接到 Python 包索引(PyPI),查找这些包的最新版本。 2. 如果这些包已经安装,`-U` 参数会确保它们被更新到最新版本。 3. 如果这些包未安装,`pip` 会下载并安装它们。 ### 注意事项 - 确保你的 Python 环境是正确的(通常是 Python 2.7 或 3.x,取决于 ROS 版本)。 - 在某些系统(如 Ubuntu)中,可能需要使用 `sudo` 来以管理员权限安装这些包(例如 `sudo pip install -U rosinstall empy defusedxml netifaces`)。 - 如果遇到权限问题,可以考虑使用虚拟环境(virtualenv)来避免系统范围的安装。 ### 示例输出 执行这条命令后,你可能会看到类似以下的输出(具体内容取决于你的环境和包的当前状态): ``` Collecting rosinstall Downloading https://files.pythonhosted.org/packages/.../rosinstall-0.7.8.tar.gz Collecting empy Downloading https://files.pythonhosted.org/packages/.../empy-3.3.4.tar.gz Collecting defusedxml Downloading https://files.pythonhosted.org/packages/.../defusedxml-0.7.1.tar.gz Collecting netifaces Downloading https://files.pythonhosted.org/packages/.../netifaces-0.11.0.tar.gz Installing collected packages: rosinstall, empy, defusedxml, netifaces Running setup.py install for rosinstall ... done Running setup.py install for empy ... done Running setup.py install for defusedxml ... done Running setup.py install for netifaces ... done Successfully installed defusedxml-0.7.1 empy-3.3.4 netifaces-0.11.0 rosinstall-0.7.8 ``` ### 总结 这条命令用于安装或更新与 ROS 相关的 Python 工具包,确保你的 ROS 开发环境具备必要的依赖。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值