【发布时间】:2021-04-30 04:10:41
【问题描述】:
我有一个在 Qt 5.9 环境下构建的程序。当我将程序复制到安装了 Qt 5.6 的服务器时,程序无法启动,并出现以下错误:
./myapp: /usr/lib64/libQt5Core.so.5: version `Qt_5.9' not found (required by ./myapp)
但 /usr/lib64/libQt5Core.so.5 确实存在,它是指向 libQt5Core.so.5.6.1 的链接。
我认为 .so 文件的次要版本不会破坏兼容性。字符串`Qt_5.9'是如何进入myapp的,对程序的加载有何影响?
【问题讨论】:
-
你是如何配置/链接你的程序的?您是否使用了一些 Qt 5.6 中没有的功能?
-
我认为 .so 文件的次要版本不会破坏兼容性。 对于 Qt 5.6 中已经存在的函数,这是正确的。但是,即使是次要版本也可能会引入可能在应用程序中使用的新功能。此类应用程序无法在旧版本上运行。
-
我认为这与 Qt5.6 和 Qt 5.9 之间的代码更改无关,因为由于找不到.so,程序甚至还没有启动。我认为也许 .so 加载器决定不加载 libQt5Core.so.5.6.1,因为它不包含程序所需的标志“Qt_5.9”。我不清楚 .so 加载程序如何加载 .so。它不只是按文件名加载吗?
标签: c++ qt qt5 shared-libraries dynamic-linking