有一件事总是让我感到困惑:当软件以二进制形式发布时,供应商有时会提供用不同版本的 GCC 编译的多个二进制文件。我以 Opera 浏览器为例,但我记得其他软件供应商也这样做。
Opera 为其浏览器提供了几个版本(http://snapshot.opera.com/unix/10.0-Alpha-1/intel-linux/):
- opera-10.00-4102.gcc4-qt4.i386.rpm
- opera_10.00.4102.gcc4.qt3_i386.deb
- opera-10.00-4102.gcc4-qt4.i386.tar.gz
- (ETC。)
为什么要声明 GCC 版本?我想这与依赖管理无关,不像打包(RPM 或 DEB)或 Qt 版本。
答案1
在这种情况下,这是因为 QT 是用 C++ 构建的,并且最近的几个 GCC 版本破坏了 C++ ABI,这就是为什么您需要与您的系统具有相同 ABI 的版本。
一般来说,商业应用程序在可能的情况下都会以静态链接的形式发送,因为依赖系统库(可能的例外是 libc)是充满危险的。
关于 Debian 上次更改 C++ ABI 的一些详细信息请参见: