`

g++ ,Makefie 编译 ns3

 
阅读更多

 

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 安装页面]

 

 

 

 

分享到:
评论

相关推荐

    makefie语法简单介绍

    makefile是一种自动化编译的工具,它的存在主要是为了处理Unix/Linux环境下复杂的编译过程,让开发者能够通过编写makefile文件,来高效地组织和管理程序的编译和链接过程。简单来说,makefile就是一系列规则的集合,...

    makefie教程

    3. **编写命令**:为每个目标编写具体的编译命令,包括编译选项、源文件路径等。 #### 六、示例:简单的 makefile 文件 下面是一个简单的 `makefile` 示例,用于编译一个名为 `hello` 的 C 语言程序: ```make CC...

    一个简单的makefie

    在编程世界中,`makefile`是构建自动化工具`make`的基础配置文件,用于编译、链接和执行程序。对于初学者来说,理解和掌握`makefile`的编写与使用是至关重要的,因为它能够提高开发效率,特别是在处理大型项目时。`...

    中文版makefie教程

    3. **命令(Command)**:在每个规则下,以反斜杠 `\` 或者行首的 tab 键开始的行表示命令。这些命令会在规则执行时被运行,通常用于编译、链接等操作。 4. **变量(Variable)**:Makefile 支持变量,可以用来存储...

    makefie用法

    3. **模式规则**: - 模式规则允许使用通配符匹配多个目标和依赖项。 ```makefile %.o: %.c gcc -c -o $@ $< ``` 4. **条件执行**: - 使用条件表达式控制某些命令或规则的执行。 ```makefile ifdef DEBUG ...

    Makefile在my项目下多层次文件编译源码

    里面包含了实例项目,用于学习多层次文件夹下面Makefile文件的自动编译,使用环境是Ubuntu等linux环境,同时要求的环境是具有gcc编译,同时具有make即可。里面项目代码文件较简单,只简单输出。

    linux 编程Makefie详解

    通过 Makefile,开发者可以定义项目构建所需的各个步骤,从而实现代码的自动化编译与链接。 **1.2 准备知识** 了解基本的 shell 命令和文件系统操作有助于更好地理解 Makefile 的工作原理。此外,熟悉 C/C++ 编程...

    makefile生成工具

    该程序自动分析C代码文件的引用关系并自动生成makefile供linux下编译连接使用。

    makefile框架

    3. **规则(Rule)**:定义如何根据依赖项生成目标。规则通常包含一个命令行,告诉`make`如何编译源文件。例如,`gcc -c src/file.c -o obj/file.o`用于将`src/file.c`编译为`obj/file.o`。 4. **变量(Variable)*...

    Linux环境下make和makefile详解

    3. 可执行的命令:Makefile 文件需要说明如何编译各个源文件并连接生成可执行文件,以及定义源文件之间的依赖关系。 Makefile 文件的优点包括: * 自动维护编译工作:Makefile 文件可以自动判断应当编译哪个源文件...

    Makefile最经典教程

    Makefile 是一种用于编译和构建软件的工具,尤其在 C 和 C++ 等编程语言项目中广泛应用。它由 Richard Stallman 在 1977 年左右创建,并集成到了 GNU 工程之中。Makefile 文件中定义了一系列的规则和命令,使用 make...

    linux工程样例框架-C/C++-makefile框架-CMakefile框架

    本资源包含两个样例框架makefile+CMakefile: 已经写好了初始化的makefile和CMakeLists.txt文件,只需要在框架的基础上添加自己的需求就可以了,但是最基础的make和cmake的语法还是需要懂的,才能写好框架,提高自己...

    内核配置_yaffs2补丁

    将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie; 将yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下; 将yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下.

    自己的 C语言项目航空订票系统 和它对应的思维导图

    Linux 里面的C语言 vim 编辑器 使用 makefie 1. order_information.txt (订单的信息) 2.flight_information.txt ( 航班的信息) 3.com_information.txt ( 投诉信息文件 ) 4.mima.txt (注册者 ...

    解析如何在android中增加gsensor驱动(MMA7660)

    修改Makefie首先,修改放置驱动的目录里的Makefile(kernel/driver/misc),添置如下语句: 代码如下:obj-$(CONFIG_SENSORS_MMA7660) += mma7660.o 2. 增加驱动文件 把驱动文件mma7660.c添加到kernel/driver/misc...

Global site tag (gtag.js) - Google Analytics