1

我使用 Windows 上 Qt 5.0.2 提供的 MinGW 工具链编译了一个库。结果我收到了一个 library.so 文件。首先,我在 Qt 应用程序中使用库失败,但现在我发现当我复制liblibrary.so文件并调用它时一切liblibrary.dll正常liblibrary.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。

克里斯

4

1 回答 1

2

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

在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仍然有点奇怪。在这个问题 中,用户与您有相同的问题并保留两个文件,这只是一种解决方法。根据稍后的答案,您似乎需要修改您的 makefile 以生成具有适当扩展名的文件。也许这会有所帮助: http: //www.mingw.org/wiki/sampleDLL

于 2013-07-17T15:50:33.010 回答