qt - 部署静态链接的 Qt 应用程序向后兼容性

标签 qt ubuntu gcc

这是我第一次尝试让 Qt 应用程序在不同的系统上工作。

我选择了静态链接方法。我已经编译了 Qt 5.5 的源代码并使用静态 Qt 编译了我的应用程序。该可执行文件在我的计算机上运行良好。
我的操作系统是 Ubuntu 15.04。但是当我尝试在 Ubuntu 14.04 上运行相同的可执行文件时,我遇到了麻烦。错误消息的关键细节如下所示。

libstdc++.so.6 cxxabi_1.3.8 not found



我做了一个标准的谷歌搜索并意识到这是因为我的机器上有一个更新版本的它,我创建可执行文件的机器。有很多不同的方法来处理这个问题。我看到的解决方案之一是运送您自己的 libstdc++.so 副本。与可执行文件。但是当我尝试将 .so 文件复制到笔式驱动器时,出现警告说文件系统不支持此类文件。

我的问题是,我做错了什么?此外,如果我想让可执行文件以 Ubuntu 10.04 为目标,那么处理向后兼容性问题的正确程序是什么。我知道一种方法是在我的机器上安装相同的操作系统,然后创建可执行文件,还有其他方法吗?

最佳答案

libstd++ 向后兼容但不向前兼容,这意味着您可以使用比您编译它的版本更新的 libstdc++ 版本运行程序,但反之则不行。这就是你所经历的。

处理此问题的一种方法是使用较旧的操作系统版本作为构建机器。例如,当您使用 Ubuntu 14.04 LTS 时,您将获得 this list of compatible target systems .

您使用的构建系统可能会限制可用的编译器。在 Ubuntu 14.04 上,您将获得 GCC 4.8,它适用于大多数 C++11,并且可以使用 clang 3.6 的软件包,这将为您提供完整的 C++14 支持。

如果您不想使用石器时代的编译器,那么以 Ubuntu 10.04 为目标将具有挑战性。

发布 libstdc++ 的想法对您没有多大帮助,因为您会遇到与 libc 相同的问题。

关于qt - 部署静态链接的 Qt 应用程序向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36605691/

相关文章:

linux - 添加从 RPM 移植的 pkg 后,JFrog Artifactory 和 MergeList/var/lib/apt/lists "(NewVersion2)"问题

c++ - GCC C++ 名称修改引用

python - 需要帮助重写函数 QWebPage.userAgentForUrl()

c++ - 如何确定 QString 中的特定字符是字母还是标点符号?

c++ - 为什么在Qt中创建主窗口之前必须加载语言包?

ubuntu - meteorjs - 从 Windows 到 ubuntu 13.10

linux - Bash 脚本 - 查找目录,并在其中执行某些操作。或者找到一个文件,然后用它做点什么

gcc - gcc 在 c99 模式下是否错误地执行隐式函数声明?

gcc - 调试选项 -g 如何更改二进制可执行文件?

c++ - 升级到 ubuntu 17.10(以及 Fedora)后,qDebug() 停止工作(不再打印到控制台)