1

我正在mpolsr尝试ns-2.29Linux 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.

4

1 回答 1

1

ns-2.29_mpolsr.rar文件已损坏,因为作者mpolsr只更改了. Makefile,但没有更改Makefile.in. 因此,当您运行 . 时./configure,您将擦除Makefile.

这些是编译它需要执行的步骤:

1. 编辑Makefile.in

将目录olsr和添加mpolsrINCLUDES变量中。它应该如下所示:

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

将目标文件添加mpolsrOBJ_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.

于 2013-02-03T12:20:04.557 回答