为什么有分离的gcc3和gcc4二进制文件的Linux软件

总是困惑我的一件事是:当软件以二进制forms分发时,供应商有时会提供几个用不同版本的GCC编译的二进制文件。 我以Opera浏览器为例,但是我记得其他软件厂商也是这样做的。

Opera为浏览器提供了几个版本( http://snapshot.opera.com/unix/10.0-Alpha-1/intel-linux/ ):

  • 歌剧10.00-4102.gcc4-qt4.i386.rpm
  • opera_10.00.4102.gcc4.qt3_i386.deb
  • 歌剧10.00-4102.gcc4-qt4.i386.tar.gz
  • (等等。)

为什么说GCC版本? 我想这与依赖pipe理无关,不像包装(RPM或DEB)或Qt版本。

在这种情况下,这是因为QT是使用C ++构build的,最近的一些GCC版本已经打​​破了C ++ ABI,这就是为什么您需要与您的系统具有相同ABI的版本。

通常,商业应用程序在可能的情况下是静态链接的,因为依赖于系统库(libc可能是个例外)是充满危险的。

Debian最后一次改变C ++ ABI的一些细节可以在下面看到:

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