Without -fcommon we get an error due to program_name being used in two source files: ld: error: duplicate symbol: program_name >>> defined at global.c >>> global.o:(program_name) >>> defined at progname.c >>> progname.o:(.bss+0x0) in archive ../gnu/libgnu.a clang-12: error: linker command failed with exit code 1 (use -v to see invocation)