Also es gibt da verschiedenste Möglichkeiten. Neben C/C++ Lösungen gibt es beispielsweise unter Windows häufig Delphi, das eingesetzt wird. oder unter Java das SWT (Standard Widget Toolkit). Dort werden gleichfalls native Libs angesprochen, wobei es darauf ankommt, ob Du diese Libs bereits auf dem System installiert hast. Für SWT brauchst Du auf jeden Fall eine explizite dll unter Windows.
Wenn Du Benutzeroberflächen unter C/C++ entwickeln möchtest, fallen mir folgende Möglichkeiten ein:
- Qt -- Vorteil ist das plattformunabhängige Entwickeln, so dass die Programme auch nativ unter Linux und MacOS X laufen. Allerdings müssen die Programme unter GPL gestellt werden, wenn Du kein Geld für die Qt Lizenz berappen willst.
- GTK -- ebenfalls plattformunabhängig. Hier musst Du aber auch unter Windows entsprechende Libs installieren (vgl. Gimp)
- wxWidgets -- auch hier Plattformunabhängigkeit. Kenne aber sonst nicht viel darüber.
- MFC -- Microsoft Foundation Classes für Visual Studio. Läuft halt nur unter Windows.
- VCL -- so heißt glaube ich die Lösung von Borland als Alternative zur MFC.
Die MFC soll wohl nicht aktiv weiterentwickelt werden, da Microsoft zunehmend auf .NET setzt (und damit auch verstärkt auf C#). Dann muss man noch anmerken, dass ein Framework wie Qt nicht einfach nur eine GUI erzeugen kann, sondern mit enorm viel zusätzlichen Klassen aufwartet, beispielsweise zur Netzwerkprogrammierung oder XML- oder Datenbank-Verarbeitung etc. Das ist dann schon sehr mächtig.
Zu Deiner eigentlichen Frage bezüglich der Bibliotheken. Ich bin da kein Experte, aber ich denke die Möglichkeit beteht immer in folgenden drei Varianten: entweder Du linkst die benötigten Libs statisch mit in Dein Programm. Das lässt das Programm natürlich anwachsen, ist dafür aber immer lauffähig, allerdings nicht gegen etwaige Sicherheitslücken geschützt, die in den Libs im Laufe der Zeit entdeckt werden. Zweitens kannst Du die benötigten Libs einfach mitliefern. Das war unter der DLL-Hell unter Windows gemeint, wenn von einer Bibliothek massenweise verschiedene Versionen auf einem Rechner auftauchten. Die dritte Möglichkeit ist unter Linux die populärste, nämlich auf dynamische Bibliotheken zu setzen. So laufen die ganzen Qt libs unter KDE bereits und brauchen nicht extra nachgeladen zu werden. Sie können außerdem bei Aktualisierungen einfach ausgetauscht werden und alle Programme, die darauf aufsetzen, profitieren davon. Nachteil ist, dass Du dümmstenfalls eine Latte von Abhängigkeiten bekommst und der Anwender viele libs nachinstallieren muss. Beispielsweise auch ein Problem, wenn ein Gnome Benutzer ein KDE Programm benutzen möchte.
Aber da ist auch einiges Halbwissen dabei. Vielleicht kann ja jemand kompetentes noch ergänzend oder korrigierend eingreifen.