Category: Compilation & Linking
What's the meaning of these cryptic filename suffixes (g++A, g++B, etc.)?
Different versions of one compiler are not necessarily link-compatible with each other. This is a particular issue with the GNU C++ compiler, where a library compiled with one version of the compiler may not be usable from code compiled with a different version of the compiler. To completely avoid such issues, the Codemesh runtime libraries contain a code in their filename that allows the distinction between different compiler versions. The following table contains the mapping:
|g++A||GNU C++ 2.95/2.96|
|g++B||GNU C++ 3.0|
|g++C||GNU C++ 3.1|
|g++D||GNU C++ 3.2|
|g++E||GNU C++ 3.3|
|g++F||GNU C++ 3.4|
|g++G||GNU C++ 4.0|
If you need to provide support for multiple versions of g++, we recommend that you also follow such a mangling scheme. If you only have to support one version, you can avoid doing this.
When linking your application, you have to pick the version that matches the compiler you're using. If you use the Codemesh-supplied build files, this is done automatically for you, otherwise you have to do it yourself.
It appears that recent releases of the g++ compiler do a better job maintaining ABI compatibility, but we will continue this mangling scheme in the near future.