【问题标题】:How close do Qt libraries have to match (COMPILE vs RUNTIME)Qt 库必须匹配多近(COMPILE vs RUNTIME)
【发布时间】:2016-03-25 14:34:56
【问题描述】:
我有一个使用 Qt5 库的应用程序。我正在针对 Qt 5.6.1 编译我的应用程序,但并非所有用户都已更新到最新的 Qt5 库,实际上一个用户仍在使用 Qt 5.4.0
我发现我正在使用 Qt 5.5 中引入的方法 - 但该应用程序仍然与使用 Qt 5.4.0 的用户一起运行(我假设他没有使用 Qt 5.5.0 中引入的方法运行该函数)
那么针对 Qt 库的 COMPILED 与 RUNTIME Qt 库的匹配度有多接近?必须 RUNTIME 版本 >= COMPILETIME 版本吗?还是必须 RUNTIME 版本 >= 我使用的方法的版本?
【问题讨论】:
标签:
qt
shared-libraries
version
【解决方案1】:
阅读这篇关于兼容性的简短article。
在 linux 上执行 ldd qtapp | grep -i qt 会给我这个输出
libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f3003cc3000)
libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f300419a000)
libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f30046e3000)
据我了解,如果您将来更新您的 Qt 版本,例如从 Qt 5.4 到 Qt 5.5,那么应该不会有任何问题。它通常是安全的。
但是,您所做的事情有潜在的危险并且会自找麻烦。我会称之为玩毒蛇并说它还没有咬我。迟早会的。
使用 5.5 中引入的方法,然后让您的用户使用 5.4 是不正确的做法。
如果您的客户使用的是 5.4,我强烈建议您也使用 5.4 版本。如果他们升级到 5.6 版,您的代码仍将运行,不会发生崩溃。如果您急需 5.6 版本,我建议随应用程序一起提供 5.6 dll,并告诉用户这是一个重要的升级。