QMAKE:将静态库链接到另一个静态库

Posted

技术标签:

【中文标题】QMAKE:将静态库链接到另一个静态库【英文标题】:QMAKE: Link static library against another static library 【发布时间】:2018-01-12 12:03:39 【问题描述】:

我有一个 QMAKE staticlib 项目 (libtest.a),它依赖于子项目 (liblogger.a)

我尝试将他添加到 test.pro:

LIBS += -L$$OUT_PWD/../libs/logger/ -llogger

PRE_TARGETDEPS += $$OUT_PWD/../libs/logger/liblogger.a

但是,最后,qmake pack .a 没有 liblogger.a 的库

ar cqs libtest.a libtest.o

我不能使用 QMAKE_AR += 或 QMAKE_LIBFLAGS +=,我需要用这个 AR 命令构建静态库

ar cqs libtest.a libtest.o ../libs/logger/liblogger.a

有什么想法吗?

【问题讨论】:

静态库实际上只不过是一个简单的目标文件存档,因此它们并没有真正链接。如果您想使用多个静态库,您需要将可执行程序(或共享库)与 both 静态库链接,或者提取目标文件以创建一个包含所有目标文件的大型库两个静态库。 是的,我知道,但我想将所有目标文件打包到我的静态库中。我可以使用 AR 命令手动完成,但我不知道如何使用 QMAKE 完成 我的建议是不要这样做,并在链接可执行程序时使用这两个库。 你说得对,但我想用_main()函数构建一个静态库,并从main()调用这个_main函数。为什么?因为 LGPL 重新链接许可证更容易 【参考方案1】:

一种可能的策略是添加一个自定义构建目标,该目标取决于您的项目 (libtest.a) 和子项目 (liblogger.a),它通过调用 ar 输出您正在寻找的统一库。

你可以查看qmake的文档here。

然后,将该自定义构建步骤设置为包含main() 的项目的依赖项。

【讨论】:

以上是关于QMAKE:将静态库链接到另一个静态库的主要内容,如果未能解决你的问题,请参考以下文章

QT静态库静态编译

用qmake搭建框架之加载静态共享库

将静态库与静态库链接

如何使用cmake生成基于静态库的动态链接库

MacOS 上的 Qbs 静态库

VS2013编译Qt5.6.0静态库(乌合之众)