Qt在Windows中共享库,而不是生成.lib文件

时间:2015-02-17 12:50:52

标签: c++ qt shared-libraries qt5

我有一个简单的类(来自Qt示例的模拟时钟),我想将其作为编译成共享库的测试。所以我最终想要的是一个。 dll 文件和一个。 lib 文件。

我所做的只是创建一个新项目,添加模拟时钟头和源文件,然后在专业文件中配置TEMPLATE = lib

然而,这只会创建一个。 dll 文件,我在docs上找到的文章不是很有帮助。

有谁知道如何解决这个问题,并最终得到 dll lib 文件?

编辑1

完成此操作后

#if defined(TEST)
#define AnalogClockPlug Q_DECL_EXPORT
#else
#define AnalogClockPlug Q_DECL_IMPORT
#endif

然后只需在我的主类前面添加AnalogClockPlug,在 pro 文件中定义TEST ,qt生成一个 lib 文件。

然而,我不确定我究竟为什么,或者即使它是正确的。

2 个答案:

答案 0 :(得分:8)

Q_DECL_EXPORT与__declspec(dllexport)pragma完全相同(在Windows下)。它使您的类的所有方法都转到dll'exports'表(dll二进制文件中的特殊部分)。

Lib实用程序只读取dll导出,并生成所谓的“导入库” - 它不像通常的静态库,包含实际代码,但只是一堆记录表明“这样的程序名称”是在'这样的dll名称'中找到。

如果您没有该pragma,则您的dll导出表为空,并且lib实用程序拒绝输出空的lib文件。就是这样。

答案 1 :(得分:2)

要制作静态库,您还需要添加

CONFIG+= staticlib

到.pro文件