zu 1) Die -L... und -l... flags werden von gcc an den Linker weitergegeben. Der weiss dann, welche Bibliotheken er linken muss und wo sie zu finden sind.
zu 2) Mit -L/usr/freeware/lib32 wird dem Linker gesagt, dass er auch in diesem Verzeichnis nach Bibliotheken zu suchen hat. Die können ja im Prinzip überall rumliegen. Mit -lX11 weisst man den Linker an, die Bibliothek "libX11.a" oder "libX11.so" mit in das fertige Programm einzubauen.
Das die Reihenfolge nicht stimmt, sieht man an der Meldung "...not used for resolving any link" und danach "Unresolved text symbol". Verdächtig wird sowas, wenn er erst sagt, dass die Biliothek xy unnötig ist und nachher quengelt, dass er nix aus dieser Bibliothek finden kann.
zu 3) In der Regel lässt der Linker sowieso alles weg, was Du nicht brauchst (deshalb ja das Problem mit der Reihenfolge), aber natürlich kannst Du das -lGL in dem Fall auch weglassen.
zu 4) RTFM! ;-)
MfG,
Tilmann