为什么 Linux 软件有单独的 gcc3 和 gcc4 二进制文件

为什么 Linux 软件有单独的 gcc3 和 gcc4 二进制文件

有一件事总是让我感到困惑:当软件以二进制形式发布时,供应商有时会提供用不同版本的 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 的一些详细信息请参见:

http://lwn.net/Articles/139810/

相关内容