1. ns3 的安装见网站: http://www.nsnam.org/wiki/index.php/Installation#Using_Python
我选择 的是tarball 安装,毕竟下下来就能安了,不用什么版本仓库,毕竟不熟悉
安装方法:
(1). 安装准备,安装必要的依赖工具和软件库
sudo apt-get install gcc g++ python python-dev bzr gdb valgrind gsl-bin libgsl0-dev libgsl0ldbl flex bison tcpdump sqlite sqlite3 libsqlite3-dev libxml2 libxml2-dev libgtk2.0-0 libgtk2.0-dev vtun lxc uncrustify sudo apt-get install doxygen graphviz imagemagick python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev libboost-signals-dev libboost-filesystem-dev
(2). 下载并安装 ns3
# 1 step download and extraction cd ~ mkdir repos cd repos wget http://www.nsnam.org/releases/ns-allinone-3.12.1.tar.bz2 tar -xjf ns-allinone-3.12.1.tar.bz2 cd ns-allinone-3.12.1.tar.bz2 #你会看到如下一些文件 #build.py constants.pyc nsc-0.5.2 README util.pyc #constants.py ns-3.12.1 pybindgen-0.15.0.795 util.py # 2 step build ns-3 with ns3-allinone ./build.py # 成功的话,你会看到 # Build finished successfully (00:02:37) # Leaving directory `./ns-3-dev' #创建调试版和优化版文件 ./waf debug configure ./waf optimized configure ./waf #漫长的等待吧 # 如果想使用测试样例还得加上 # ./waf debug --enable-examples configure # ./waf optimized --enable-examples configure # ./waf #然后运行 ./test.py即可, 他会运行在 examples下的文件
至此,安装完毕
2. 默认的ns3工程使用waf进行编译和运行。waf的使用说明见网站:
http://waf.googlecode.com/svn/docs/wafbook/single.html (The Waf Book)
基本的配置就是在文档的当前文件夹下建立wscript,在此文件中写waf语法的函数,其语法采用的是python的语法规则,只是定义函数只用,也就是执行序列。
3. 在ns3下开发,将编写的程序是放在scratch下面,然后利用waf进行编译和运行
在ns3中的waf编译命令是:./waf
运行命令有: ./waf --run scratch/executable_filename
但是每次这样写点程序,编译和调试太慢了,通过看examples里的文件,大部分也都是c++的,有少数的python,python也是和waf一起使用的,那么能不能使用g++和makefile直接编译呢,答案是肯定的,网上已经有人成功了,但是不太详细,这里记录一下我的吧。
在利用ns-3进行开发模拟时,使用的是他的函数库,在debug开发模式下,这些头文件在:
xx/build/debug/ns3/ 下面
动态链接库在 xx/build/debug/下
所以知道了这两点,我们写的项目在编译时,使用Makefile也是可以的。
这里用一个简单例子来说明。把examples下的first.cc 拷贝到scratch下面
用g++命令编译: g++ -g first.cc -o first
一大堆错误,无法定位头文件什么的,我们已经知道头文件的位置了,所以填上就可以了。
g++ -g first.cc -o first -I /your_absolute_path/debug/ns3/
再次运行,还是报错,找不到对应函数,这是缺少链接库,好继续添加,因为第一实验只用了一个链接库,这里例子可以比较清楚的说明怎么弄。
g++ -g first.cc -o first -I /your_absolute_path/debug/ns3/ -lns3-aodv
YES!编译工作了!运行看一下,可不可以,但是很遗憾,运行时,说无法定位链接库
这是由于程序运行时会到那么几个固定的地方去找链接库,所以我们将动态链接库添加到那里就可以了。
在xx/build/debug/下的动态库,有两类一类是*.so, 另一类是*.so.3,后面的一类是前面一类的软连接,所以拷贝软链接就可以了。
sudo cp xx/build/debug/*.so.3 /usr/lib
然后再次运行程序,程序可以正常运行了。(^_^)
好,既然小例子可以通过了,其他的只要把所有的动态库都添加到编译选项中就可以了,稍微改改Makefile文件就可以了。
我整理的Makefile文件如下:
MYLN=-lns3-aodv\ -lns3-applications\ -lns3-bridge\ -lns3-config-store\ -lns3-core\ -lns3-csma-layout\ -lns3-csma\ -lns3-dsdv\ -lns3-emu\ -lns3-energy\ -lns3-flow-monitor\ -lns3-internet\ -lns3-lte\ -lns3-mesh\ -lns3-mobility\ -lns3-mpi\ -lns3-netanim\ -lns3-network\ -lns3-nix-vector-routing\ -lns3-ns3tcp\ -lns3-ns3wifi\ -lns3-olsr\ -lns3-point-to-point-layout\ -lns3-point-to-point\ -lns3-propagation\ -lns3-spectrum\ -lns3-stats\ -lns3-tap-bridge\ -lns3-template\ -lns3-test\ -lns3-tools\ -lns3-topology-read\ -lns3-uan\ -lns3-virtual-net-device\ -lns3-visualizer\ -lns3-wifi\ -lns3-wimax MYLINK_INCLUDE=-L/home/zzg/repos/ns-allinone-3.12.1/ns-3.12.1/build/debug/ HEAD_INCLUDE=-I/home/zzg/repos/ns-allinone-3.12.1/ns-3.12.1/build/debug/ CTAGS=$(MYLINK_INCLUDE) $(HEAD_INCLUDE) $(MYLN) TARGETS=first first:first.cc g++ -g first.cc -o $@ $(CTAGS) clean: rm $(TARGETS)
参考资料:1. http://bbs.61job.cn/showtopic.aspx?topicid=7058&forumpage=1&onlyauthor=1 [使用g++编译ns3文件]
2. http://www.nsnam.org/wiki/index.php/Installation#Using_Python [ns3 安装页面]
相关推荐
makefile语法参考资料,是学习makefile的中文参考
初学makefie以及工具链的使用,请指教
里面包含了实例项目,用于学习多层次文件夹下面Makefile文件的自动编译,使用环境是Ubuntu等linux环境,同时要求的环境是具有gcc编译,同时具有make即可。里面项目代码文件较简单,只简单输出。
本文比较完整的讲述GNU make工具,涵盖GNU make的用法、语法。同时重点讨论如何为一个工程编写Makefile。作为一个Linux程序员,make工具的使用以及编写Makefile是必需的。
找到了份挺好的中文 Makefile 的教程, 非常详细清楚. 大家共享
makefile的用法,讲解独到,值得一看
makefile 使用轻松入门
该程序自动分析C代码文件的引用关系并自动生成makefile供linux下编译连接使用。
linux信号量使用方法,示例中包括源码和makefie,以及经过编译的文件,可以直接运行
本资源包含两个样例框架makefile+CMakefile: 已经写好了初始化的makefile和CMakeLists.txt文件,只需要在框架的基础上添加自己的需求就可以了,但是最基础的make和cmake的语法还是需要懂的,才能写好框架,提高自己...
通用的makefile 提供两种方案。 可以编译存储在不同文件夹下的源代码。分公共makefie跟自己源代码文件夹下的makefile需要根据情况稍作修改
MakeFile 可以看做是一种简单的编程语言, 其诞生的本质目的是实现自动化
简单的Makefile架构,将相应的*.c文件放到src目录,将相应的*.h文件放到inc目录,在文件根目录执行make BIN_NAME=xxx
介绍makefile方面的好书。我就是看这一本写makefie的。
将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie; 将yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下; 将yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下.
Linux 里面的C语言 vim 编辑器 使用 makefie 1. order_information.txt (订单的信息) 2.flight_information.txt ( 航班的信息) 3.com_information.txt ( 投诉信息文件 ) 4.mima.txt (注册者 ...
修改Makefie首先,修改放置驱动的目录里的Makefile(kernel/driver/misc),添置如下语句: 代码如下:obj-$(CONFIG_SENSORS_MMA7660) += mma7660.o 2. 增加驱动文件 把驱动文件mma7660.c添加到kernel/driver/misc...
一开始用的是ICC AVR,应为它用起来比较简单,不像winavr那样,要写个Makefie ,比较的麻烦,但icc avr的缺点是太过于简陋,调试程序时,感觉不是很好。后来经同学介绍,用起了winavr,其实也是比较的简单,只不过要...
Linux环境下make和makefile详解