ns3网络仿真中使用waf编译链接外部库

以添加fftw3库为例
找到ns-3.xx目录下的wscript,在其中添加以下代码
第一

def configure(conf):
    #省略
     env = conf.env
    conf.env[ fftw3 ] = conf.check(mandatory=True, lib= fftw3 , uselib_store= FFTW3 )
    conf.env.append_value( CXXDEFINES ,  ENABLE_FFTW3 )
    conf.env.append_value( CCDEFINES ,  ENABLE_FFTW3 )

然后(特别注意倒数第二行代码的改动)

def create_ns3_program(bld, name, dependencies=( core ,)):#^^?
    program = bld(features= cxx cxxprogram )#<-------------------
    program.is_ns3_program = True
    program.name = name
    program.target = "%s%s-%s%s" % (wutils.APPNAME, wutils.VERSION, name, bld.env.BUILD_SUFFIX)
    # Each of the modules this program depends on has its own library.
    program.ns3_module_dependencies = [ ns3- +dep for dep in dependencies]
    program.includes = "#"
    program.use = program.ns3_module_dependencies
    if program.env[ ENABLE_STATIC_NS3 ]:
        if sys.platform ==  darwin :
            program.env.STLIB_MARKER =  -Wl,-all_load,-lfftw3 #<---------------------
        else:
            program.env.STLIB_MARKER =  -Wl,-Bstatic,--whole-archive,-lfftw3 #<------------------------
            program.env.SHLIB_MARKER =  -Wl,-Bdynamic,--no-whole-archive,-lfftw3 #<---------------------
    else:
        if program.env.DEST_BINFMT ==  elf :
            # All ELF platforms are impacted but only the gcc compiler has a flag to fix it.
            if  gcc  in (program.env.CXX_NAME, program.env.CC_NAME):
                program.env.append_value ( SHLIB_MARKER ,  -Wl,--as-needed )#--no-as-needed->--as-needed 特别注意这句
    return program

最后

def add_scratch_programs(bld):
    all_modules = [mod[len("ns3-"):] for mod in bld.env[ NS3_ENABLED_MODULES ] + bld.env[ NS3_ENABLED_CONTRIBUTED_MODULES ]]
    try:
        for filename in os.listdir("scratch"):
            if filename.startswith( . ) or filename ==  CVS :
                continue
            if os.path.isdir(os.path.join("scratch", filename)):
                obj = bld.create_ns3_program(filename, all_modules)
                obj.path = obj.path.find_dir( scratch ).find_dir(filename)
                obj.source = obj.path.ant_glob( *.cc )
                obj.target = filename
                obj.name = obj.target
                obj.install_path = None
                obj.uselib =  FFTW3 #<---------------------
            elif filename.endswith(".cc"):
                name = filename[:-len(".cc")]
                obj = bld.create_ns3_program(name, all_modules)
                obj.path = obj.path.find_dir( scratch )
                obj.source = filename
                obj.target = name
                obj.name = obj.target
                obj.install_path = None
                obj.uselib =  FFTW3 #<------------------------------------
    except OSError:
        return

保存后,再次使用./waf的时候即可链接外部库

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容