部署后的 Linux qt 应用程序 - 符号查找错误:libQt5Core.so.5 未定义符号:uncv_getDefaultName_56

Posted

技术标签:

【中文标题】部署后的 Linux qt 应用程序 - 符号查找错误:libQt5Core.so.5 未定义符号:uncv_getDefaultName_56【英文标题】:Linux qt application after deployment - symbol lookup error: libQt5Core.so.5 undfined symbol: uncv_getDefaultName_56 【发布时间】:2019-01-15 14:08:29 【问题描述】:

我想在 Linux 上部署我的 qt 应用程序,但出现如下链接错误:

符号查找错误 libQt5Core.so.5 未定义符号:uncv_getDefaultName_56

它可能与 libicu 有一些共同点,但它在正确版本的 /lib64 目录中。我的目标是静态部署所有内容,我不确定 QT 是否可以实现

【问题讨论】:

附带说明,与某些库静态链接时要小心,例如Qt。在静态或动态链接时,许可证经常会有所不同,您可以做什么和不可以做什么。 【参考方案1】:

您可以在二进制文件上使用 ldd 来找出它需要哪些库。

除非您拥有 Qt 的商业许可证,否则您只能部署动态链接的二进制文件。您可以部署应安装在系统上的所需动态库。在我的系统上,我为 libQt5Core 找到以下内容

lrwxrwxrwx 1 root root      20 Dec 26 19:30 /usr/lib64/libQt5Core.so -> 
libQt5Core.so.5.12.0
lrwxrwxrwx 1 root root      20 Dec 26 19:30 /usr/lib64/libQt5Core.so.5 -> 
libQt5Core.so.5.12.0
lrwxrwxrwx 1 root root      20 Dec 26 19:30 /usr/lib64/libQt5Core.so.5.12 -> 
libQt5Core.so.5.12.0
-rwxr-xr-x 1 root root 5421416 Dec 26 19:32 /usr/lib64/libQt5Core.so.5.12.0

libQt5Core.so.5.12.0 是实际的库。其他的是 ldconfig 创建的链接。您应该将它们全部包含在您的二进制文件中。

或者,您可以在目标系统上安装 libQt5 软件包。

【讨论】:

是的,我知道你的意思。一切都找到了,我已经静态地构建了 qt。我认为问题在于也链接的 libicui18n.so.56 库。事实上,我可以通过将此库添加到我的部署目录来解决,但是我无法从应用程序中显示 Qtray 图标。 所有 .so(共享对象)文件都遵循相同的规则。尝试将所有 libicui18n.so* 文件从 lib 文件夹复制到部署文件夹。我怀疑你复制的只是一个动态链接,现在什么都没有了。 我已经尝试了所有这些方法,但它们都不能正常工作。我的结论是,您需要安装 qtbase 包才能在 Linux 上使用 Qttrayicons 运行应用程序。如果有人能找到解决方案,我会很高兴知道的。

以上是关于部署后的 Linux qt 应用程序 - 符号查找错误:libQt5Core.so.5 未定义符号:uncv_getDefaultName_56的主要内容,如果未能解决你的问题,请参考以下文章

Qt打包部署程序自动查找依赖DLL工具windeployqt

在 Linux 中正确部署 Qt 应用程序

使用静态 Qt 构建在 Linux 上部署 Qt5 应用程序

qt串口静态搭建,qt app部署到所有linux系统

如何在符合 LGPL 的 Linux 上部署 Qt5 应用程序? [关闭]

linux下对qt编写的程序进行部署