【问题标题】:How to tell qmake to use .dll.a suffix for shared libraries如何告诉 qmake 为共享库使用 .dll.a 后缀
【发布时间】:2020-12-24 09:23:29
【问题描述】:

在使用 MinGW-w64 在 Windows 上使用 qmake 构建 Qt 项目(例如 Qwt)时,我注意到共享库获得了 .a 后缀而不是 .dll.a

由于我想同时构建静态库和共享库,因此静态库和共享库具有相同的名称,以 .a 结尾。

我如何告诉 qmake 使用 .dll.a 扩展共享库?

P.S.:如果您想知道如何使用 qmake 构建静态库:只需将 CONFIG+=staticlib 添加到 qmake 命令即可。

【问题讨论】:

    标签: qt mingw qmake


    【解决方案1】:

    当您使用CONFIG += sharedlib 构建共享库时,您会得到DLL 文件以及作为DLL 包装器的.a 文件,它只包含如何从DLL 中获取符号的说明;这个.a 文件是静态构建的,因此您可以使用QMAKE_EXTENSION_STATICLIB 选择它的扩展名.. 这是它在.pro 中的样子

    TEMPLATE = lib
    CONFIG += sharedlib
    CONFIG(sharedlib, staticlib|sharedlib): { QMAKE_EXTENSION_STATICLIB = dll.a }
    

    这应该会生成您想要的内容以及 DLL!

    不用说,当你切换到静态编译CONFIG += staticlib ..你只是得到.a 库文件

    .. 是的,它有点令人困惑!和有趣..如果你想简化,那么你可能想考虑改变你的策略..例如,而不是动态库的.dll.a扩展..你可以改变静态库的扩展!

    TEMPLATE = lib
    CONFIG += staticlib
    CONFIG(staticlib, staticlib|sharedlib): { QMAKE_EXTENSION_STATICLIB = static.a }
    

    因此你得到.a 用于共享库,.static.a 用于静态库..

    【讨论】:

    • 感谢您的解释。我必须说非常令人困惑。为什么共享库的.a 文件是静态构建的?老实说,我一直在寻找一个简单的解决方案来向qmake 命令行添加一些东西。但是,将 QMAKE_EXTENSION_STATICLIB=dll.a 添加到 Qwt 的 qmake 命令会导致 make[2]: *** No rule to make target 'D:/Prog/winlibs64-9.2.0/custombuilt/qt/lib/libQt5PrintSupport.dll.a', needed by '../lib/qwt.dll'. Stop.,与按照您的建议编辑 .pri 文件时相同。所以看来它可能需要设置在多个地方...
    • @BrechtSanders,是的,可以从命令行使用。这很简单..它只是根据需要输出名称。我从您显示的错误中看到的是,命名正确dll.a ..这就是您的问题。现在为什么 Qwt 不接受这个名字是围绕 Qwt 进行调查的事情 ..
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多