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
移植的过程中。主要是由于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)
详细错误如下图:
可见,ndnPlaneFow
模块里的源文件在链接上找不到ndnSIM
模块的依赖文件。
解决方案:
在ndnPlaneFow
模块的wscript
文件的编译依赖中,添加ndnSIM
:
module = bld.create_ns3_module('ndnPlaneFow', ['internet', 'propagation', 'antenna', 'applications','ndnSIM'])
现在就可以在Mac
成功编译和运行了NDNSIM
了。