Overview

这篇文章是我很久之前移植NDNSIM1.0时的笔记,最早想从台式机的Ubuntu 12.04上移植到别的机器的Ubuntu上,都会出现各种编译问题,一直没能成功,之后想在Mac上做实验,所以下决心把台式机中的NDNSIM 1.0的源代码移植到Mac上,主要遇到了以下问题,做了一下记录,以备以后查看。这个移植应该不只是移植到Mac上的方法,而是适用所有Ubuntu系统的。

g++编译选项-Werror的问题

将源代码编译之后,运行./waf报以下错:

../src/ndnSIM/model/wire/ccnb/ccnb-parser/syntax-tree/block.cc:43:15: error: unused variable 'CCN_MAX_TINY' [-Werror,-Wunused-const-variable]

如下图:

NDNSIM移植mac问题1.png

这个问题经常出现在NDNSIM移植的过程中。主要是由于NS3中编译时,自动加了-Werror选项,该选项会把编译中遇到的警告全部当错误处理,因此会报错。

解决方法:
使用以下编译命令:

CXXFLAGS="-O0 -g" ./waf configure --with-python=/opt/local/bin/python2.7 --enable-examples

代替原来的:

./waf configure --with-python=/opt/local/bin/python2.7 --enable-examples

显式去除-Werror选项即可。

自己编写的模块编译问题

由于我在NS3中,添加了一个叫做ndnPlaneFow的模块,用于做实验,发现编译之后,使用./waf运行,会报以下错误:

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

详细错误如下图:

NDNSIM移植mac问题2.png

可见,ndnPlaneFow模块里的源文件在链接上找不到ndnSIM模块的依赖文件。
解决方案:
ndnPlaneFow模块的wscript文件的编译依赖中,添加ndnSIM

module = bld.create_ns3_module('ndnPlaneFow', ['internet', 'propagation', 'antenna', 'applications','ndnSIM'])

现在就可以在Mac成功编译和运行了NDNSIM了。