我正在尝试使用mpolsr
在ns-2.29
中编译Linux Mint
修补后的gcc-4.7
。我收到以下错误:
trace/cmu-trace.o: In function `MPOLSR_pkt::access(Packet const*)':
cmu-trace.cc:(.text._ZN10MPOLSR_pkt6accessEPK6Packet[_ZN10MPOLSR_pkt6accessEPK6Packet]+0x7): undefined reference to `MPOLSR_pkt::offset_'
collect2: error: ld returned 1 exit status
make: *** [ns] Error 1
我发现cmu-trace.cc
文件包含正确的标头。我尝试添加cc文件,该文件具有偏移功能的定义,但没有成功。任何帮助将不胜感激。
我正在使用ns-2.29_mpolsr.rar
。
答案 0 :(得分:1)
ns-2.29_mpolsr.rar
文件已损坏,因为mpolsr
的作者仅更改了Makefile
,而不是Makefile.in
。因此,当您运行./configure
时,您将删除Makefile
。
以下是编译它们所需的步骤:
<强> 1。修改Makefile.in
:
将目录olsr
和mpolsr
添加到INCLUDES
变量。它应该是这样的:
INCLUDES = \
-I. \
@V_INCLUDES@ \
-I./tcp -I./sctp -I./common -I./link -I./queue \
-I./adc -I./apps -I./mac -I./mobile -I./trace \
-I./routing -I./tools -I./classifier -I./mcast \
-I./diffusion3/lib/main -I./diffusion3/lib \
-I./diffusion3/lib/nr -I./diffusion3/ns \
-I./diffusion3/filter_core -I./asim/ -I./qs \
-I./diffserv -I./satellite \
-I./wpan -I./olsr -I./mpolsr
将mpolsr
的目标文件添加到OBJ_CC
变量中。你应该添加这样的一行(中间的那一行是新的):
olsr/OLSR.o olsr/OLSR_state.o olsr/OLSR_rtable.o olsr/OLSR_printer.o \
mpolsr/MPOLSR.o mpolsr/MPOLSR_state.o mpolsr/MPOLSR_m_rtable.o mpolsr/MPOLSR_printer.o mpolsr/MPOLSR_rtable.o\
common/ns-process.o \
如果您使用的是gcc
的新版本,则还应添加-fpermissive
指令,否则将无法编译。为此,请将.cc.o:
指令更改为:
.cc.o:
@rm -f $@
$(CPP) -fpermissive -c $(CFLAGS) $(INCLUDES) -o $@ $*.cc
<强> 2。使配置脚本可执行
在ns-2.29_mpolsr
目录中,运行
chmod +x configure
第3。运行配置脚本
根据ns的allinone版本,运行如下:
./configure --with-otcl=$PWD/../otcl-1.13/ --with-tclcl=$PWD/../tclcl-1.19/
以上版本号适用于ns-allinone-2.34
<强> 4。使强>
在同一目录中运行
make -j100
我使用gcc-4.6.3
检查了上述内容,但它也适用于gcc-4.7
。