Page:
NDN项目组代码修改时链接静态库的方法
Clone
Table of Contents
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
NDN项目组代码修改时链接静态库的方法
NDN项目组各个源代码都是采用waf来构建的,所以如果需要新添加自己的静态链接库,可以按如下方法操作,此处以添加jsoncpp库为例。
-
首先保证要引入的链接库已经安装,比如如果没有安装jsoncpp,可以执行下面的命令安装
sudo apt install libjsoncpp-dev -
接着需要修改项目根目录下的wscript文件,需要修改三个地方
-
首先需要修改options:
def options(opt): opt.load(['compiler_cxx', 'gnu_dirs']) opt.load(['default-compiler-flags', 'compiler-features', 'coverage', 'pch', 'sanitizers', 'boost', 'dependency-checker', 'unix-socket', 'websocket', 'doxygen', 'sphinx_build', 'cmake'], tooldir=['.waf-tools']) nfdopt = opt.add_option_group('NFD Options') opt.addUnixOptions(nfdopt) opt.addDependencyOptions(nfdopt, 'libresolv') opt.addDependencyOptions(nfdopt, 'librt') opt.addDependencyOptions(nfdopt, 'libpcap') opt.addDependencyOptions(nfdopt, 'libjsoncpp') # 这一行便是新添加的 nfdopt.add_option('--without-libpcap', action='store_true', default=False, help='Disable libpcap (Ethernet face support will be disabled)') nfdopt.add_option('--without-systemd', action='store_true', default=False, help='Disable systemd integration') opt.addWebsocketOptions(nfdopt) nfdopt.add_option('--with-tests', action='store_true', default=False, help='Build unit tests') nfdopt.add_option('--with-other-tests', action='store_true', default=False, help='Build other tests') -
接着需要修改configure函数(这样在执行
./waf configure的时候会检查jsoncpp有没有安装)def configure(conf): conf.load(['compiler_cxx', 'gnu_dirs', 'default-compiler-flags', 'compiler-features', 'pch', 'boost', 'dependency-checker', 'websocket', 'doxygen', 'sphinx_build']) conf.env.WITH_TESTS = conf.options.with_tests conf.env.WITH_OTHER_TESTS = conf.options.with_other_tests conf.find_program('bash', var='BASH') if 'PKG_CONFIG_PATH' not in os.environ: os.environ['PKG_CONFIG_PATH'] = Utils.subst_vars('${LIBDIR}/pkgconfig', conf.env) conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'], uselib_store='NDN_CXX') if not conf.options.without_systemd: conf.check_cfg(package='libsystemd', args=['--cflags', '--libs'], uselib_store='SYSTEMD', mandatory=False) conf.checkDependency(name='librt', lib='rt', mandatory=False) conf.checkDependency(name='libresolv', lib='resolv', mandatory=False) conf.checkDependency(name='libjsoncpp', lib='jsoncpp', mandatory=False) # 这一行是新添加的 ..... -
最后需要在build函数引入所需的链接库
def build(bld): versionhpp(bld) bld(features='subst', name='version.cpp', source='core/version.cpp.in', target='core/version.cpp', install_path=None, VERSION_STRING=VERSION_BASE, VERSION_BUILD=VERSION) bld.objects( target='core-objects', features='pch', source=bld.path.find_node('core').ant_glob('*.cpp') + ['core/version.cpp'], use='version.cpp version.hpp NDN_CXX BOOST LIBRT', includes='.', export_includes='.', headers='core/common.hpp') nfd_objects = bld.objects( target='daemon-objects', source=bld.path.ant_glob('daemon/**/*.cpp', excl=['daemon/face/*ethernet*.cpp', 'daemon/face/pcap*.cpp', 'daemon/face/unix*.cpp', 'daemon/face/websocket*.cpp', 'daemon/main.cpp']), use='core-objects', includes='daemon', export_includes='daemon') nfd_objects.use += ' LIBJSONCPP' # 这一行是新添加的(需要全部大写) ...
-
-
完成上述过程之后,就可以开始编译了,执行
./waf configure看看:
