在多个 Linux 发行版上部署 Qt 5.5.1 C++ 应用程序
Deploying a Qt 5.5.1 C++ application on multiple Linux distributions
我有一个用纯 C++ 和 Qt 5.5.1 编写的应用程序。它在 GCC (Lubuntu 15.10 x86) 和 MSVC 14.0 (Windows 8.1 x64) 中编译良好,并且在这两个平台上都能正常工作。我现在想分发它,以便它可以 运行 在其他 Linux 发行版上,而无需在那里重新编译它们。
我不太确定如何做到这一点; Qt docs page 通常静态地建议 link 一切,但这不是大多数其他消息来源所说的(据我所知,静态地 link 和 glibc
是一个坏主意) .在任何情况下,我都不能真正 link everything 静态,因为 GCC 抱怨 Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
并且据我所知,这不是一个可以简单忽略的警告。我已经厌倦了仅针对 libgcc
和 libstdc++
进行静态 link,我复制了其他缺少的库 - libXau.so.6
、libXdmcp.so.6
和 libxcb.so.1
干净的 CentOS 7 安装并尝试 运行 那里的程序,但这给了我一个分段错误;可能是因为系统是 64 位的,而不是我编译应用程序的平台?
- 我如何才能以 运行大多数常见配置支持的形式分发应用程序?静态 linking 不是问题,因为无论如何都会发布源代码。
- link 静态或动态地对抗 Qt 哪个更好(如果最大的二进制可移植性是优先考虑的)?
- 我需要提供二进制文件的两个单独版本,32 位和 64 位,还是 32 位版本就足够了?
我的建议是提供两个版本:一个不受支持的完全静态版本,可以工作 "anywhere" 带有星号,表示如果它是商业产品,您将无法支持它。人们会尝试 运行 把它放在冰箱上,我没骗你。官方支持的构建必须仅针对 特定 平台,并且您不能没有 VMs/test 目标 运行 这些平台,以及您构建和测试的平台.
我有一个用纯 C++ 和 Qt 5.5.1 编写的应用程序。它在 GCC (Lubuntu 15.10 x86) 和 MSVC 14.0 (Windows 8.1 x64) 中编译良好,并且在这两个平台上都能正常工作。我现在想分发它,以便它可以 运行 在其他 Linux 发行版上,而无需在那里重新编译它们。
我不太确定如何做到这一点; Qt docs page 通常静态地建议 link 一切,但这不是大多数其他消息来源所说的(据我所知,静态地 link 和 glibc
是一个坏主意) .在任何情况下,我都不能真正 link everything 静态,因为 GCC 抱怨 Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
并且据我所知,这不是一个可以简单忽略的警告。我已经厌倦了仅针对 libgcc
和 libstdc++
进行静态 link,我复制了其他缺少的库 - libXau.so.6
、libXdmcp.so.6
和 libxcb.so.1
干净的 CentOS 7 安装并尝试 运行 那里的程序,但这给了我一个分段错误;可能是因为系统是 64 位的,而不是我编译应用程序的平台?
- 我如何才能以 运行大多数常见配置支持的形式分发应用程序?静态 linking 不是问题,因为无论如何都会发布源代码。
- link 静态或动态地对抗 Qt 哪个更好(如果最大的二进制可移植性是优先考虑的)?
- 我需要提供二进制文件的两个单独版本,32 位和 64 位,还是 32 位版本就足够了?
我的建议是提供两个版本:一个不受支持的完全静态版本,可以工作 "anywhere" 带有星号,表示如果它是商业产品,您将无法支持它。人们会尝试 运行 把它放在冰箱上,我没骗你。官方支持的构建必须仅针对 特定 平台,并且您不能没有 VMs/test 目标 运行 这些平台,以及您构建和测试的平台.