Linkerreihenfolge: Vorne stehen die Dinge, die von den Dingen weiter hinten abhängen sollen.
Ein bisschen Erklärung zu der Kommandozeile, da du anscheinend nicht in der Lage warst, diese selber zu erforschen:
xc++ ist ein Schalter für den Compiler, der die Sprache auf C++ stellt. Wenn du nur linkst, ist dieser natürlich egal. Wenn du C-Dateien damit übersetzt, werden diese als C++ übersetzt. Dies mag bei einfachen Hello World Programmen noch funktionieren, wird aber im Allgemeinen nicht so sein.
lstc++ ist ein Linkerschalter und sagt, dass die C++-Standardbibliothek dazu gelinkt werden soll. Wenn du nur compilierst, ist dieser natürlich egal. Du brauchst es natürlich nur dann zwingend, wenn dein C++-Code überhaupt Teile der C++-Bibliothek benutzt. Einfache Beispiele funktionieren eventuell auch ohne.
shared-libgcc ist ein Linkerschalter, der sagt, dass eine bestimmte Variante der C-Laufzeitbibliothek benutzt werden soll. Wenn du nur compilierst, ist dieser natürlich egal. Die shared-Variante ist in der Lage, korrekt mit Exceptions umzugehen. Das brauchst du natürlich nur dann, wenn dein C++-Code überhaupt Exceptions werfen kann. Dies wird in aller Regel der Fall sein, selbst wenn du dir dessen nicht bewusst bist. Einfache Beispiele funktionieren aber eventuell auch ohne.