【问题标题】:Deployment of statically linked Qt application backward compatibility部署静态链接的 Qt 应用程序向后兼容性
【发布时间】:2016-04-13 17:36:59
【问题描述】:

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

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

找不到libstdc++.so.6 cxxabi_1.3.8

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

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

【问题讨论】:

    标签: qt ubuntu gcc


    【解决方案1】:

    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 应用程序的公司用于针对旧 Ubuntu 版本进行构建,这是我的主要疑问
    • 你需要什么兼容性?你需要什么编译器?您在应用程序中使用哪种 C++ 标准?这是一个非常习惯的问题。鉴于所有典型的 Linux 发行版都是从源代码编译它们的包,所以这个问题没有一般的答案。 Linux 并未针对专有软件进行优化。
    • 我希望从 ubuntu 10.04 开始兼容,c++ 标准 gnu++98,抱歉没有具体说明,但我之前认为会有一个通用的方法。
    • 看起来您可以使用 Ubuntu 10.04 和捆绑的 GCC 4.4 来编译 Qt 和您的应用程序,因为 Qt 可以使用任何支持 C++98 标准的编译器进行编译。所以 GCC 4.3 应该可以做到这一点 forum.qt.io/topic/39674/… 这可能工作到 Qt 5.6。从 Qt 5.7 开始,Qt 需要 C++11 编译器。
    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多