E.1. GCC 2.96

The background:  The GCC 2.95 series is an official GNU release and version 2.95.3 of GCC is the most bug-free in that series. We have never noticed compilation problems that we could trace to gcc-2.95.3. Starting with Red Hat Linux 7.0, Red Hat included a heavily patched CVS version of GCC in their distribution and named it 2.96. Red Hat included this version in the distribution because GCC 3.0 was not finished at the time, and they needed a compiler that worked well on all of their supported platforms, including IA64 and s390. The Linux distributor Mandrake also followed Red Hat's example and started shipping GCC 2.96 with their Linux-Mandrake 8.0 series.

The statements:  The GCC team disclaimed any link with GCC 2.96 and issued an official response to GCC 2.96. Many developers around the world began having problems with GCC 2.96, and several projects, avifile among them, started recommending other compilers. Other interesting links are Linux kernel news flash about kernel 2.4.17 and Voy Forum. MPlayer also suffered from intermittent problems that were all solved by switching to a different version of GCC. Several projects started implementing workarounds for some of the 2.96 issues, but we refused to fix other people's bugs, especially since some workarounds may imply a performance penalty.

GCC 2.96 does not allow | (pipe) characters in assembler comments because it supports Intel as well as AT&T Syntax and the | character is a symbol in the Intel variant. The problem is that it silently ignores the whole assembler block. This is supposedly fixed now, GCC prints a warning instead of skipping the block.

The present:  Red Hat says that GCC 2.96-85 and above is fixed. The situation has indeed improved, yet we still see problem reports on our mailing lists that disappear with a different compiler. In any case it does not matter any longer. Hopefully a maturing GCC 3.x will solve the issue for good. If you want to compile with 2.96 give the --disable-gcc-checking flag to configure. Remember that you are on your own and do not report any bugs. If you do, you will only get banned from our mailing list because we have had more than enough flame wars over GCC 2.96. Please let the matter rest.

If you have problems with GCC 2.96, you can get 2.96-85 packages from the Red Hat ftp server, or just go for the 3.0.4 packages offered for version 7.2 and later. You can also get gcc-3.2.3-37 packages (unofficial, but working fine) and you can install them along the gcc-2.96 you already have. MPlayer will detect it and use 3.2 instead of 2.96. If you do not want to or cannot use the binary packages, here is how you can compile GCC 3 from source:

  1. Go to the GCC mirrors page page and download gcc-core-XXX.tar.gz where XXX is the version number. This includes the complete C compiler and is sufficient for MPlayer. If you also want C++, Java or some of the other advanced GCC features gcc-XXX.tar.gz may better suit your needs.

  2. Extract the archive with

    tar -xvzf gcc-core-XXX.tar.gz

  3. GCC is not built inside the source directory itself like most programs, but needs a build directory outside the source directory. Thus you need to create this directory via

    mkdir gcc-build

  4. Then you can proceed to configure gcc in the build directory, but you need the configure from the source directory:

    cd gcc-build

  5. Compile GCC by issuing this command in the build directory:

    make bootstrap

  6. Now you can install GCC (as root) by typing

    make install