Ah ich sehe wo die Verwirrung herkommt.
Das Problem ist das Folgende, der Compiler baut nicht die Anwendung, er baut jede Unit einzeln in sog. "Object Files" (die .o Dateien) die haben noch referenzen auf Symbole aus anderen Units. Dann werden all die Object Files einem anderen Programm übergeben, dem Linker. Dieser Linker löst dann die Referenzen auf. Der sieht z.B. Unit1.o benutzt die Funktion "Test", die liegt in Unit2.o also verknüpft (linkt) er das zusammen.
Der Linker ist ein Programm das in /usr/bin/ liegt und "ld" heißt. Neben den Object Files kann man dem Linker noch Bibliotheken geben damit er weiß Welche der Symbole in keinem der Object Files liegen sondern zur Laufzeit aus der Bibliothek geladen wird. das geht mit dem Parameter "-l" (l wie library)
Deshalb die Fehlermeldung:
Warning linker: /usr/bin/ld: -lstdc++ kann nicht gefunden werden: Datei oder Verzeichnis nicht gefunden
Das sagt dir das Linker Programm "/usr/bin/ld" (du kannst auch andere Linker benutzen, so gibts z.B. noch gold oder lld) hat den Fehler geworfen das er "-lstc++" nicht nutzen/finden kann. wenn da steht -lXYZ bedeutet das er sucht nach libXYZ.so in /lib, /usr/lib oder im LD_LIBRARY_PATH. Wenn die Datei dort nicht liegt kommt die oben genannte Meldung