gcccross-compilingnaming-conventions

Can anyone explain the gcc cross-compiler naming convention?


I have tried to understand the naming conventions behind the gcc cross-compilers, but there seems to be conflicting answers. I have the following three cross-compilers in my system:

When reading through the GNU libtool manual, it specifies the cross-compiler naming convention as:

cpu-vendor-os (os = system / kernel-system)

This does not seem completely accurate with the compilers in my system. Is the information in the GNU manual old, or have the compiler distributors simply stopped following it?


Solution

  • The naming comes down to this:

    arch-vendor-(os-)abi

    So for example:

    x86_64-w64-mingw32 = x86_64 architecture (=AMD64), w64 (=mingw-w64 as "vendor"), mingw32 (=win32 API as seen by GCC)

    i686-pc-msys = 32-bit (pc=generic name) msys binary

    i686-unknown-linux-gnu = 32-bit GNU/linux

    And your example specifically:

    arm-none-linux-gnueabi = ARM architecture, no vendor, linux OS, and the gnueabi ABI.

    The arm-eabi is alike you say, used for Android native apps.

    One caveat: Debian uses a different naming, just to be difficult, so be careful if you're on a Debian-based system, as they have different names for eg. i686-pc-mingw32.