C++ Name Mangling

The C++ compiler uses a system for converting function names as seen by the programmer into symbol names as seen by the linker. This is known as name mangling and, among other benefits, it enables language features such as function overloading. It is also the reason that a simple function written in C cannot be used without declaring it as extern "C".

Unfortunately, different C++ compiler versions mangle names differently. Furthermore, different versions of the stdc++ library will have different implementations (including different functions and global variables). Therefore, it is not possible to link codes that have been compiled with different C++ compilers.

Consequences

Qt must be compiled with the same version of the C++ compiler used to compile PSRCHIVE.

Fortran Runtime Libraries

Different Fortran compilers also have incompatible implementations of the Fortran runtime libraries. Therefore, it is not possible to link codes that have been compiled with different Fortran compilers.

Consequences

PGPLOT must be compiled with the same version of the Fortran compiler used to compile PSRCHIVE.