gcc是GNU编译器集合,包含C、C++、Java、Ada、Forturn等编译器,我们主要使用的是C和C++,它们对应的程序是gcc和g++,为了兼容BSD等UNIX系统,C编译器的程序名还可以是cc或CC。
Linux的一切都是由gcc编译完成的,由于不同主版本的gcc的ABI并不完全相同,因此,如果Linux系统与应用程序采用不同主版本号的gcc进行编译,很可能产生非常多的问题。
查看gcc版本的方法是gcc -v。注意,这里不但可以显示出gcc的版本,还会显示出gcc的编译参数,这也非常重要,即使是相同版本的gcc,在使用不同的编译参数时也会产生兼容问题,比如线程模型。
glibc
glibc是Linux的标准库函数,封装了Linux的绝大多数的系统调用,相当于Windows的API,所有应用软件都要依赖于它。
他的主版本发生改变时,它所提供的函数行为可能发生加大改变,基于不同glibc版本的程序在混合使用时,经常会出现段错误。
查看glibc的版本的方法有两种。一种是Linux系统的软件包以RPM方式发布,可以利用rpm -q glibc命令查看所安装的glibc是什么版本,文件名后面的数字就是版本数字。另外就是查看/lib目录下下的libc-x.y.z.so文件,x、y、z就标明了主版本、副版本和修正版本。
kernel
内核是Linux的核心,Linux的一切功能都有内核提供,而不同的内核版本会有很大的变化,比如2.4.x和2.6.x内核区别非常大,可以说它们完全不兼容。另外,即便都是2.6.x的内核,不同的修正版本也会存在较大差异,也很可能产生兼容问题。
产看内核版本的方式是uname -r命令。