Gcc wsn的ns2 mpolsr编译错误

Gcc wsn的ns2 mpolsr编译错误,gcc,linker,makefile,ns2,Gcc,Linker,Makefile,Ns2,我正试图用gcc-4.7在Linux-Mint中编译mpolsr补丁ns-2.29。我得到以下错误: 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::of

我正试图用
gcc-4.7
Linux-Mint
中编译
mpolsr
补丁
ns-2.29
。我得到以下错误:

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
文件被破坏,因为
mpolsr
的作者只更改了
生成文件,而没有更改
中的
生成文件。因此,当您运行
/configure
时,您将删除
生成文件中的更改

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

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
./configure --with-otcl=$PWD/../otcl-1.13/ --with-tclcl=$PWD/../tclcl-1.19/
mpolsr
的对象文件添加到
OBJ_CC
变量中。你应该添加一个这样的线(中间的一个是新的):

如果您使用的是新版本的
gcc
,还应添加
-fppermissive
指令,否则它将无法编译。为此,请将
.cc.o:
指令更改为:

.cc.o:
        @rm -f $@
        $(CPP) -fpermissive -c $(CFLAGS) $(INCLUDES) -o $@ $*.cc
2。使配置脚本可执行

ns-2.29\mpolsr
目录中,运行

chmod +x configure
3。运行配置脚本

根据allinone版本的ns,您可以运行以下操作:

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
./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
检查
ns-2.29_mpolsr.rar
文件,因为
mpolsr
的作者只更改了
Makefile
,而不是
Makefile.in
。因此,当您运行
/configure
时,您将删除
生成文件中的更改

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

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
./configure --with-otcl=$PWD/../otcl-1.13/ --with-tclcl=$PWD/../tclcl-1.19/
mpolsr
的对象文件添加到
OBJ_CC
变量中。你应该添加一个这样的线(中间的一个是新的):

如果您使用的是新版本的
gcc
,还应添加
-fppermissive
指令,否则它将无法编译。为此,请将
.cc.o:
指令更改为:

.cc.o:
        @rm -f $@
        $(CPP) -fpermissive -c $(CFLAGS) $(INCLUDES) -o $@ $*.cc
2。使配置脚本可执行

ns-2.29\mpolsr
目录中,运行

chmod +x configure
3。运行配置脚本

根据allinone版本的ns,您可以运行以下操作:

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
./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
一起工作,非常感谢。我没想到这么详细的答案来得这么快。非常感谢,效果非常好。但我不能投票,因为我的分数较低。非常感谢。我没想到这么详细的答案来得这么快。非常感谢,效果非常好。但我无法投票,因为我的分数较低。