私はC++プログラムでOpenSSLを使用しており、crypto
とssl
をリンクする必要があります。私はネットワークシミュレータ3 でこの依存関係を追加していWAFを使用してスタティックライブラリをリンクするにはどうすればよいですか?
-lcrypto -lssl
をしかし、私はWAFでこれを行う方法がわからない:それは、例えば、gccのためだったら、私はちょうど通過します。依存関係としてどのように追加する必要がありますか?
私はC++プログラムでOpenSSLを使用しており、crypto
とssl
をリンクする必要があります。私はネットワークシミュレータ3 でこの依存関係を追加していWAFを使用してスタティックライブラリをリンクするにはどうすればよいですか?
-lcrypto -lssl
をしかし、私はWAFでこれを行う方法がわからない:それは、例えば、gccのためだったら、私はちょうど通過します。依存関係としてどのように追加する必要がありますか?
まず、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"])
私は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に固有のものです。