问题说明:
如果您在ns3中创建自己的程序,并在scratch下创建自己的单个文件程序,则waf可以成功编译并运行,但如果您自己创建多个. cc文件,则无法在ns3附带的waf中成功编译。 其理由是,ns3拥有的waf不去寻找依赖,也不知道如何添加依赖。
解决方法:
仿照src下模块的方法,将自己编写的其他非主文件放入一个模块中,用ns3的waf编译时自动编译此模块,达到正确找到头文件和链接的目的。
具体步骤:
进入CDsrc//src源文件夹
编辑用于VIMwscript//ns3的wscript
在all_modules下以该格式添加自己的模块名称,即以后要创建的文件夹的名称。 这里添加了common-work,最后添加了
' ' common-work '
保存并推送文件
mkdir common-work //创建自己的文件夹
cd common-work
mkdir model //类似于其他模块创建的文件夹。 自己的头文件可以放在这里。 cc文件也是
举一个简单的打印函数的例子。 (myzzg.h ) ) ) ) ) )。
#ifndef MYZZG_H
#define MYZZG_H 1
void myprint (;
#endif
在common-work文件夹下直接写入自己的库函数: (myzzg.cc ) ) ) )。
#包含
#include 'model/myzzg.h '
void myprint (
{
std:cout
}
从其他模块将wscript和waf (这可以不修改)文件复制到此文件夹,然后对wscript进行修改。
简单的例子如下(
# #-* -模式: python; py-indent-offset: 4; indent-tabs-mode: nil; 编码: UTF-8; -*-
import os.path
defbuild(bld ) :
# don ' tdoanythingforthismoduleifemu ' snot enabled。
# if not bld.env [ ' enable _ emu ' ] :
# return
module=bld.create _ ns3 _ module (zzg ),['network'] ) )。
module.source=[
' myzzg.cc ',
]
headers=bld.new _ task _ gen (ns3 header ) )。
headers.module='zzg '
headers.source=[
' model/myzzg.h ',
]
bld.ns3_python_bindings (
回到scratch下编写自己的主程序,调用上述库时正确包含头文件即可。
例如以下所示。 (zzg.cc ) )。
#包含
int main () )
{
我的打印(;
返回0;
}
实行
./waf --run zzg
可以看到打印的句子。
分析原理是,在定制的模块中,利用ns3的waf进行编译时,将自己定义的头文件复制到build/debug/ns3/下,对应模块的. cc文件对应. o文件
注:1.模块中的wscript文件中规定了复制模块中的头文件和生成. cc文件。 请参阅上述示例
2 .复制到ns3下的头文件的名称与模型下的相同。 因此,在scratch中使用时,如果无法顺利获取包含的头文件,可以查看编译运行时的输出信息,也可以自己去文件夹下看看是否复制到了那里
3 .目前修改的wscript有点问题。 编译时有点问题,但不影响执行。 例如,在上面的示例中,在ns3下生成zzg-module.h文件,其中包含相应的错误消息。 这个慢慢做吧。 不影响大局。
ns3在自己的模块中使用其他链接库
(1)在本模块的wscript的开头部分添加以下代码。
导入选项
ef conf :
conf.env.append _ value (' link flags ',['-lmysqlclient'] )。
如果您使用自己的链接库而不是-Lmysqlclient,并且需要指定基于链接的位置,请首先添加-l部门。
)2) src模块编译时调用本模块的config
vim src/wscript
在defconfigure[conf]:函数下添加
conf.sub_config(mymodel ) )。
共享至:
2012-02-10 18:33
参照6633
注释