Glibc vs GCC vs binutils compatibility

前端 未结 2 744
滥情空心
滥情空心 2021-01-06 01:24

Is there a sort of official documentation about version compatibility between binutils, glibc and GCC? I found this matrix for binutils vs GCC version compatibility. It woul

2条回答
  •  不知归路
    2021-01-06 02:00

    When building a cross-compiler there are at least two, and sometimes three, platform types to consider:

    Platform A is used to BUILD a cross compiler HOSTED on Platform B which TARGETS binaries for embedded Platform C. I used the words BUILD, HOSTED, and TARGETS intentionally, as those are the options passed to configure when building a cross-GCC.


    • BUILD PLATFORM: Platform of machine which will create the cross-GCC
    • HOST PLATFORM: Platform of machine which will use the cross-GCC to create binaries
    • TARGET PLATFORM: Platform of machine which will run the binaries created by the cross-GCC

    Consider the following (Canadian Cross Config, BUILD != HOST platform):
    A 32-bit x86 Windows PC running the mingw32 toolchain will be used to compile a cross-GCC. This cross-GCC will be used on 64-bit x86 Linux computers. The binaries created by the cross-GCC should run on a 32-bit PowerPC single-board-computer running LynxOS 178 RtOS (Realtime Operating System).

    In the above scenario, our platforms are as follows:
    BUILD: i686-w32-mingw32
    HOST: x86_64-linux-gnu
    TARGET: powerpc-lynx-lynxos178

    However, this is not the typical configuration. Most often BUILD PLATFORM and HOST PLATFORM are the same.


    A more typical scenario (Regular Cross Config, BUILD == HOST platform):
    A 64-bit x86 Linux server will be used to compile a cross-GCC. This cross-GCC will also be used on 64-bit x86 Linux computers. The binaries created by the cross-GCC should run on a 32-bit PowerPC single-board-computer running LynxOS 178 RtOS (Realtime Operating System).

    In the above scenario, our platforms are as follows:
    BUILD: x86_64-linux-gnu
    HOST: x86_64-linux-gnu
    TARGET: powerpc-lynx-lynxos178


    When building the cross-GCC (assuming we are building a Regular Cross Config, where BUILD == HOST Platform), native versions of GNU BinUtils, GCC, glibc, and libstdc++ (among other libraries) will be required to actually compile the cross-GCC. It is less about specific versions of each component, and more about whether each component supports the specific language features required to compile GCC-4.9.2 (note: just because GCC-4.9.2 implements language feature X, does not mean that language feature X must be supported by the version of GCC used to compile GCC-4.9.2. In the same way, just because glibc-X.X.X implements library feature Y, does not mean that the version of GCC used to compile glibc-X.X.X must have been linked against a glibc that implements feature Y.


    In your case, you should simply build your cross-GCC 4.9.2 (or if you are not cross compiling, i.e. you are compiling for CentOS 5 on Linux, build native GCC 4.9.2), and then when you link your executable for CentOS 5, explicitly link glibc v2.2.4 using -l:libc.so.2.2.4. You also probably will need to define -std=c99 or -std=gnu99 when you compile, as I highly doubt glibc 2.2.4 supports the C 2011 standard.

提交回复
热议问题