I want to make use of a more recent GCC version. Therefore, I compiled GCC 10 and installed it into a non-standard directory
/software/gcc10/. So far so good.
However, I am faced with problems when I actually want to use this new version of GCC. I modified my
PATH variable to include
/software/gcc10/bin/ such that
gcc --version now confirms that the system finds my new GCC 10 compiler (instead of my system's GCC 8 one).
However, when I try to compile a program with this setup, I get errors about undefined references to
std::filesystem, which should be part of GCC 10's libstdc++. My assumption here is that while I am now using a more recent compiler, the linker still wants to link against my system's libstdc++ instead of that in
I tried changing
LD_LIBRARY_PATH to include the respective directory, but that doesn't seem to have any effect.
Inspecting the output of running
gcc with the
-v option, I stumbled upon the
LIBRARY_PATH environment variable, which according to gcc's docs is used as follows:
The value of LIBRARY_PATH is a colon-separated list of directories, much like PATH. When configured as a native compiler, GCC tries the directories thus specified when searching for special linker files, if it cannot find them using GCC_EXEC_PREFIX. Linking using GCC also uses these directories when searching for ordinary libraries for the -l option (but directories specified with -L come first).
And indeed: Setting the
LIBRARY_PATH variable accordingly allows me to compile my program successfully. However, it seems that this is a gcc-specific solution and I can't help but wonder whether there is a more standard way of doing this (that would e.g. also tell clang where to look for the C++ standard library to link against)?
Even better would be a solution that would cause my new GCC 10 compiler to always use the GCC 10 stdlib whilst invocation of the system's GCC 8 compiler would always link against the systems GCC 8 stdlib. Is there a way to tell a specific compiler binary that it has a specific stdlib that it should use?