【问题标题】:How can I build software using Qt 5.5 which runs on old Linux systems (e.g. RedHat 4 or RedHat 5)?如何使用在旧 Linux 系统(例如 RedHat 4 或 RedHat 5)上运行的 Qt 5.5 构建软件?
【发布时间】:2015-10-27 08:38:08
【问题描述】:

我正在尝试编译一个使用 Qt 5.5 的应用程序(Qt Installer Framework),以便生成的(静态链接的)二进制文件可以在 RedHat 5 甚至 RedHat 4 等旧版 Linux 系统上运行。

我的理解是,为了生成在某些特定 Linux 发行版上运行的二进制文件,我应该在具有兼容(即足够旧)glibc 版本的系统上构建它们,而这又似乎依赖于某些 Linux 内核版本(对于系统调用等等?)。 documentation 建议配置Qt build via

$ configure -prefix $PWD/qtbase -release -static -accessibility -qt-zlib -qt-libpng -qt-libjpeg -qt-xcb -qt-pcre -qt-freetype -no-glib -no-cups -no-sql-sqlite -no-qml-debug -no-opengl -no-egl -no-xinput -no-xinput2 -no-sm -no-icu -nomake examples -nomake tests -skip qtactiveqt -skip qtenginio -skip qtlocation -skip qtmultimedia -skip qtserialport -skip qtquick1 -skip qtquickcontrols -skip qtscript -skip qtsensors -skip qtwebkit -skip qtwebsockets -skip qtxmlpatterns

唉,即使禁用了这么多 Qt 组件,在非常旧的 Linux 系统上构建 Qt 5.5 似乎也是有问题的,因为它依赖于某些仅在 RHEL6 上可用的 xcb 版本(如果我没记错的话是 1.5 或 1.7)或更新。

这让我想知道:是否可以使用 Qt 5.5 构建软件,以便将生成的二进制文件部署到较旧的 Linux 发行版(RedHat 4 和 5 在商业词汇中仍然有些流行)?如果是这样,我是否可能需要使用一些特定的标志等配置 Qt?对于它的价值,我不需要大部分 Qt 功能。只有核心、小部件和 QML(用于脚本),但没有 WebKit 或 SQL。

【问题讨论】:

    标签: linux qt deployment qt5


    【解决方案1】:

    您可能能够在这些系统上编译 xcb,然后使用该 xcb 库构建 Qt 并将其与您的应用程序一起发布。如果我理解正确:

    由于协议是标准化的,客户端使用任何实现 XCB 可以与任何 X 服务器通信(Xlib 也是如此, 当然)。

    来自this XCB tutorial,xcb 客户端仍然可以与任何 X 服务器通信,因为底层协议没有改变。但是你必须做一些实验......

    【讨论】:

    • 这很有趣,至少可以尝试一下。我希望我可以进行静态构建,这样我就不需要发送单独的共享对象了。
    • 接受这一点 - 结果我做了一个静态 libxcb 构建,然后修补了 Qt 构建系统,使其使用 $PKG_CONFIG --libs --static xcb 获取 libxcb 的链接器标志(即我添加了 --static)。
    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多