【问题标题】:Qt: mingw compiled library does only work with both library.so and library.lib file presentQt:mingw 编译库仅适用于 library.so 和 library.lib 文件存在
【发布时间】:2013-07-17 13:30:40
【问题描述】:

我使用 Windows 上 Qt 5.0.2 提供的 MinGW 工具链编译了一个库。结果我收到了一个 library.so 文件。首先,我在 Qt 应用程序中使用该库失败,但现在我发现当我制作liblibrary.so 文件的副本 并将其命名为liblibrary.dllliblibrary.lib(其中是 QtCreator 中添加库向导支持的唯一文件结尾)。

现在我想知道这是否正常,或者我是否应该更改某些内容以便不拥有两个文件(它们是精确的副本)。留下一个会使应用程序在启动过程中崩溃。我将如下库添加到我的 Qt pro 文件中:

LIBS += -L"../path/to/library" -llibrary
INCLUDEPATH += $$quote(../path/to/library)

编辑:我使用 Qt 的 MinGW 编译库,而不是作为 Qt 项目,而是使用 mingw32-make 和提供的 Makefile。结果我得到了liblibrary.so

编辑:将副本重命名为 liblibrary.dll 而不是 .lib 时,它似乎也有效。但是,我仍然需要两个文件来使应用程序工作——.so 和 .dll。

克里斯

【问题讨论】:

    标签: qt g++ mingw shared-libraries


    【解决方案1】:

    这很奇怪,我认为在 Windows 上使用 MinGW 构建共享库时应该获得 *.a 和 *.dll 文件,如 documentation 中所述:

    在windows中,MinGW会输出.a和.dll,MSVC2010会输出.lib和.dll。在 linux 中,MinGW 会输出 .so、.so.1、.so.1.0 和 .so.1.0.0——.lib、.a 和 .so 是导入库。

    您绝对不应该重命名您的文件!

    注意:

    • 不要在项目文件中的“-l”之后包含“lib”前缀。
    • 在 Windows 上将“-l”之后的所有内容都用小写字母表示
    • 不在“-l”之后为您的库名称添加任何扩展名
    • 添加并引用库中使用的 .h 文件

    使用 QtWebsocket 库的真实示例:

    INCLUDEPATH += "$${PWD}/include/"
    
    LIBS += -L"$${PWD}/libs/" -lqtwebsocket
    ...
    HEADERS += ... \
           $${PWD}/include/QWsSocket.h \
           ...
    

    在我的include/ 文件夹中,我有以下文件:

    • QWsSocket.h(取自原始项目 - 必填)

    在我的libs/ 文件夹中,我有以下文件:

    • libQtWebsocket.a
    • QtWebsocket.dll

    编辑:一开始我也为此苦苦挣扎。您是否尝试过将您的库构建为静态库(库项目中的CONFIG += staticlib)?这可能会帮助您在切换到使用共享库之前获取 *.pro 文件。

    编辑 2: 好吧,你得到一个*.so 文件的事实仍然有点奇怪。在this question 用户与您有相同的问题并保留两个文件,这只是一种解决方法。根据a later answer,您似乎需要修改您的makefile 以生成具有适当扩展名的文件。也许这会有所帮助:http://www.mingw.org/wiki/sampleDLL

    【讨论】:

    • 感谢您的回答。也许我不清楚:我不是将库编译为 Qt 项目,而是使用 Qt 提供的 MinGW。所以也许我需要在库的 Makefile 中改变一些东西?不过,我想将该库与 Qt 项目一起使用。我遵守了您在“小心”下列出的所有四项规则。
    • 非常感谢,特别是另一个问题的链接,不幸的是我之前没有找到它。所以解决方法很简单:只需在库的Makefile中将所有.so重命名为.dll即可。
    猜你喜欢
    • 2020-03-26
    • 2018-02-07
    • 2015-02-25
    • 2012-09-29
    • 1970-01-01
    • 2011-11-20
    • 2011-07-07
    • 2021-11-05
    • 2011-01-10
    相关资源
    最近更新 更多