python - WAF——合并静态库

标签 python c++ c static-libraries waf

我的项目有外部库依赖项,我正在使用 waf 脚本构建它 - C、C++。

我正在尝试构建静态库,它将静态链接所有依赖库。例如,我用它来构建动态共享对象:

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)

不会。有没有办法克服这个问题?还是我需要在后期构建功能中手动执行此操作?

最佳答案

在 waf 1.8 之前,静态库用于与共享对象共享相同的递归依赖行为。由于静态库的使用顺序,我认为这已被删除。这意味着如果您的共享对象依赖于其他库,waf 将自动包含它们,但对于静态库,您必须自己以正确的顺序列出所有库。

“uselib”的使用方法如下:

def configure(conf):

    # for libs that have a pkg-config

    conf.check_cfg("expat", args = ["--libs"]) 

    # to use /some/path/libotherextlib.a or .so

    conf.env.LIB_OEL = ['otherextlib'] 
    conf.env.LIBPATH_OEL = ["/some/path"] 

def build(bld):

    lib_lists = ["expat", "oel"]

    bld.shlib(target = 'myshlib', source = sources, use = libs_list)
    bld.stlib(target = 'mystlib', source = sources, use = libs_list)

要模块化你可以这样做:

bld.objects(source = sources1, name = "module1")
bld.objects(source = sources2, name = "module2")

modules = ["module1", "module2"]
bld.stlib(target = 'mystlib', use = modules)
bld.shlib(target = 'myshlib', use = modules)

关于python - WAF——合并静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36840071/

相关文章:

c - 如何使用 EXECL 从 C 代码执行 Python 脚本?

c - strcmp 在我的代码中不起作用

Python/gspread - 根据另一个单元格的内容更改单元格的内容

python - 安装mysql后Windows cmd无法识别python或pip

c++ - 在 MFC 中使用编辑框处理 slider 控件

C++ 将映射传递到 qml 以确定项目的可见性

MySQL 中的 Python 变量 : INSERT INTO %s

python - 将一系列序列转换为字典,反之亦然

c++ - 为什么这个 sfinae 不起作用?

c - 为什么静态链接的 "hello world"程序这么大(超过 650 KB)?