wsn的ns2 mpolsr编译错误

时间:2013-02-03 10:08:22

标签: gcc linker makefile ns2

我正在尝试使用mpolsrns-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

1 个答案:

答案 0 :(得分:1)

ns-2.29_mpolsr.rar文件已损坏,因为mpolsr的作者仅更改了Makefile,而不是Makefile.in。因此,当您运行./configure时,您将删除Makefile

中的更改

以下是编译它们所需的步骤:

<强> 1。修改Makefile.in

将目录olsrmpolsr添加到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