2017-07-14 8 views
2

私はC++プログラムでOpenSSLを使用しており、cryptosslをリンクする必要があります。私はネットワークシミュレータ3 でこの依存関係を追加していWAFを使用してスタティックライブラリをリンクするにはどうすればよいですか?

-lcrypto -lssl 

をしかし、私はWAFでこれを行う方法がわからない:それは、例えば、gccのためだったら、私はちょうど通過します。依存関係としてどのように追加する必要がありますか?

答えて

3

まず、configureにライブラリがある場合はbuildにチェックインする必要があります。

def configure(cnf): 
    # other parameters omitted for brevity 
    cnf.check(lib=["crypto", "ssl"]) 

def build(bld): 
    # other parameters omitted for brevity 
    bld(use=["crypto", "ssl"]) 

あなたはライブラリを繰り返したくない場合にも、uselib_storeパラメータを使用することができます。

cnf.check(lib=["crypto", "ssl"], uselib_store=["libs"]) 
bld(use=["libs"]) 
0

私はCRYPTOPPと同じ作業を行うことができますので、私はCRYPTOPP代わりのCryptoを追加してみました。

これは私のために働いた方法です。 以下のコードは、ns-3.xxディレクトリにあるwscriptに追加/編集する必要があります。

def configure(conf): 
    #other parameters removed 
    env = conf.env 
    conf.env['cryptopp'] = conf.check(mandatory=True, lib='cryptopp', uselib_store='CRYPTOPP') 
    conf.env['sph'] = conf.check(mandatory=True, lib='sph', uselib_store='SPH') 
    conf.env.append_value('CXXDEFINES', 'ENABLE_CRYPTOPP') 
    conf.env.append_value('CCDEFINES', 'ENABLE_CRYPTOPP') 

    conf.env['lssl'] = conf.check(mandatory=True, lib='ssl', uselib_store='OPENSSL') 
    conf.env.append_value('CXXDEFINES', 'ENABLE_SSL') 
    conf.env.append_value('CCDEFINES', 'ENABLE_SSL') 

.....

def create_ns3_program(bld, name, dependencies=('core',)): 
    program = bld(features='cxx cxxprogram') 
    #other parameters removed 
    program.use = program.ns3_module_dependencies 
    if program.env['ENABLE_STATIC_NS3']: 
     if sys.platform == 'darwin': 
      program.env.STLIB_MARKER = '-Wl,-all_load,-lcryptopp,-lsph' 
     else: 
      program.env.STLIB_MARKER = '-Wl,-Bstatic,--whole-archive,-lcryptopp,-lsph' 
      program.env.SHLIB_MARKER = '-Wl,-Bdynamic,--no-whole-archive,-lcryptopp,-lsph' 
    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,--no-as-needed,-lcryptopp,-lsph') 

    return program 

.......

def add_scratch_programs(bld): 
    all_modules = [mod[len("ns3-"):] for mod in bld.env['NS3_ENABLED_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 
       #Add the below paramters 
       obj.uselib = 'CRYPTOPP' 
       obj.uselib = 'SPH' 
       obj.uselib = 'OPENSSL' 
      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 
       #Add the below paramters 
       obj.uselib = 'CRYPTOPP' 
       obj.uselib = 'SPH' 
       obj.uselib = 'OPENSSL' 
    except OSError: 
     return 

これは基本的に、あなたが最初から実行されているシミュレータに、実行時にすべての偶然にを追加します。

PS:このスクリプトはns-3に固有のものです。

関連する問題