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