部署后的 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
使用静态 Qt 构建在 Linux 上部署 Qt5 应用程序