【发布时间】:2017-03-29 18:34:26
【问题描述】:
我正在尝试构建依赖于一些静态库的自定义 NS3 模块。这个静态库依赖于 NS3 模块。
平台:Ubuntu 16.04 x64 工具链:GCC 5.4.0
我将我的自定义 NS3 模块称为 mymodule
我将 mymodule 所依赖的库称为 mylib
我将把与 mymodule 和 mylib 链接的程序称为 myprog
wscript for 我的模块:
def build(bld):
module = bld.create_ns3_module('mymodule', ['network'])
module.features = 'c cxx cxxstlib ns3module'
module.source = [
'model/mymodule.cc' ]
# Make a dependency to some other static lib:
bld.env.INCLUDES_MYLIB = [ "some/include/path" ]
bld.env.LIB_MYLIB = ['mylib']
bld.env.LIBPATH_MYLIB = [ "some/path" ]
module.use.append('MYLIB')
# Create a program which uses mymodule
p = bld.create_ns3_program('myprog', ['core', 'mymodule'])
p.source = 'prog.cpp'
headers = bld(features='ns3header')
headers.module = 'mymodule'
headers.source = ['model/mymodule.h']
当我执行./waf build 时失败:LD 无法链接 myprog 因为 mylib 有未解析的符号。这种失败实际上是意料之中的,因为 mylib 和 mymodule 是相互依赖的,应该以非标准方式链接。
解决方法:
如果我手动构建 myprog 并使用
-Wl,--start-group -lns3.26-mymodule-debug -lmylib -Wl,--end-group,它的链接非常好,并且可以按预期工作。如果我手动组合两个静态库(使用
ar -M脚本)然后运行 ./waf build它也可以正常工作。
问题:如何将上述解决方法之一集成到wscript?
【问题讨论】:
标签: c++ static-libraries circular-dependency waf ns-3