利用Qt依赖项来避免二进制文件的重复



Qt利用许多第三方库进行图像编码、压缩、加密、音频和视频编解码器支持等等。

从历史上看,当我想利用它们时,我总是必须将它们作为额外的依赖项。我一直在想,是否有一种方法可以简单地重用Qt已经包含的二进制文件?

这确实取决于库,但总的来说,遗憾的是,这是不可能的。

Qt静态地构建和链接大多数第三方库,而不导出任何符号(请参见libpng示例(。有些甚至只链接到插件,而不是Qt库(比如sqlite,它只是插件导入的pri文件(。找到具体案例的唯一方法是检查不同Qt存储库中的src/3rdparty子文件夹。

还有一点需要考虑:Qt经常试图通过使用操作系统提供的内容来实现依赖关系。即,如果Qt在主机系统上找到libpng,它通常会链接到该库,因此代码甚至不再是Qt二进制文件的一部分,使得编译时链接依赖于Qt配置,即使符号是为具体库导出的。

唯一真正的例外是如果你静态地链接Qt。在这种情况下,链接器只会在您链接最终应用程序时引入所有这些第三方依赖项,从而使您可以针对Qt使用的库进行链接。

最新更新