将台式机上的NDNSIM1.0(包含实验脚本和转发策略代码)移植到Mac上的问题
Overviewg++编译选项-Werror的问题自己编写的模块编译问题 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了。