2
我的项目有外部库依赖关系,我正在使用waf脚本来构建它 - C,C++。WAF - 结合静态库
我想建立一个静态库,它将静态链接所有相关库。例如,我使用它来建立动态共享对象:
bld.program(features = 'c cxx cxxshlib'
, target = 'program'
, source = sources
, use = libs_list)
共享对象将具有所有链接的依赖库(具有libs_list
指定)。 但是,静态库:
bld.program(features = 'c cxx cxxstlib'
, target = 'program'
, cppflags = '-DSTATIC_LIB'
, source = sources
, use = libs_list)
不会。有没有办法解决这个问题?或者我需要在后期构建函数中手动执行此操作?
其实,这样一来,静态库将包含所有递归的依赖,因为这些都是由关键字use指定。正如你所看到的,两个libs_list是相同的(如果我正确理解你的话)。 但是,问题发生在外部库 - 例如libexpat.a。在我的情况下,libexpat将通过-Lexpat链接到共享对象,但不能用于静态库。 我想要包括所有这些外部库。 – Mojo28
@mojo:使用-v来查看发出了哪些命令。如果该命令正常,则可能是由于列表中静态库的顺序。 – neuro
是的,我用-v但没有提到libs,只有对象文件。这也许是预料之中的。问题是用ar来合并静态库并不容易,默认情况下只使用对象文件。也许这就是为什么这是不可能的。我也不确定是否有一个很好的方法来获取所有依赖静态库的列表。我试图手动运行ar。为此,我需要所有依赖静态库的列表。目前,我正在解析上下文环境以获取以STLIB_%s开头的所有变量。我不认为这是做事最好的方式。 – Mojo28