PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GUI-Libs und Grundsätzliches zum Thema Lib



26-03-2001, 16:33
Hallo zusammen,

wie bereits mehrfach an dieser Stelle erwähnt kämpfe ich immer noch damit mich in die Linuxbibliotheken einzuarbeiten. In unserer LUG haben wir diesbezüglich jetzt auch ne AG eingerichtet die das Ziel hat ein kleines Spielchen zu programmieren;-)).

Darum noch ein paar grundsätzliche Fragen:

Warum ist überall immer zu lesen das gtk nicht so richtig objektorientiert ist? Liegt das daran das da ja C dahinter steht? Ich kann ja (noch nicht) kein C++ aber ich erkenne nicht die Vor- und Nachteile. Denn durch die Widgets in gtk+ werden doch auch Objekte "erstellt", oder. Und soweit ich das begriffen habe könnte man doch eine Klasse theoretisch in C doch selbst erstellen, da ich die letzendlich als strukturierten Datentyp mit einer Funktion (den Methoden) und bestimmten Wertzuweiungen (den Eigenschaften verstehe). Ich meine man kann das vielleicht unter c++ einfacher machen...

Aber vielleicht hab ich nur was nicht richtig kapiert und ich muß einfach noch tiefer in die Materie rinn;-)). Falls jemand mich mal umfassend aufklären könnte wäre ich ihm dankbar.

Zuletzt würde ich nun noch gerne wissen was Flags in Zusammenhang mit Bibliotheken sind. Ich habe nämlich das Problem das ich eine installierte Bibliothek nicht ansprechen kann (ich befinde mich in diesem Zusammenhang auf ner HP und habe nur den cc, der wohl auch noch buggy ist). Ich weiß nun nichtmal wie die Bibliothek genau heißt und hatte versucht wie im Handbuch beschrieben einfach über include die Datei einzubinden. Da dies nicht funktioniert habe ich mir gedacht ich müßte dem Compiler mitgeben, das es sich um ne Bibliothek handelt und im das über

cc ... -llibname

mitteilen. Aber die Bibliotheksnamen die ich eingegeben hatte findet das Teil einfach nicht. Sprich wie komme ich nun an den Namen? Ich bin auch auf der Suche nach ner Beschreibung von libtool, etc. und zwar möglichst in Deutsch. Hier wäre es auch klasse wenn jamand mal detailiert erläutern könnte für was man ldd oder libtool eigentlich einsetzen kann!

Vielleicht kann ja auch einer mit folgendem Befehl auf ner SUN was anfangen und den erklären.

ucbcc -flags

Gruß und Vielen Dank

Stefan

Stefan

26-03-2001, 23:20
Das sind ja gleich viele Fragen auf einmal ;-)

Um objektorientiert zu Programmieren braucht man nicht zwingen eine objektorientierte Sprache. Aber natuerlich faellt einem die Arbeit leichter wenn der Compiler viele repetitive Aufgabe uebernimmt und mehr Fehler erkennen kann.

Das heist man kann IMHO gtk mit ruhigem Gewissen als objektorientiert bezeichen. Deswegen sind die entsprechenenden C++-Wrapper ja wirklich auch nur Leichtgewichte, die es ermoeglichen die objektorientierte Syntax von C++ zu benutzten.

Ich denke Du hast das schon ganz gut begriffen, ( vielleicht besser als sonst manch einer der grosse Toene ueber Objektorientierung spuckt).

Zu den flags:
Wenn du so spaerlich mit Compilern versorgt bist, lass die Finger von C++. Gibt ja sowieso kaum brauchbare ANSI-C++ Compiler ;-)

Fuer den richtigen HP-UX cc musst du erst mal
-Aa angeben, das er ANSI-C verdaut.

Ansonsten muss in der Quelldatei das Include-File eingebunden sein, damit der Compiler die Definitionen kennt.
Mit -Iverzeichnis kann man zusaeztliche Verzeichnisse angeben in denen nach include-Dateien gesucht wird.

Beim Linken mussen die Bibliotheken mit angegeben werden. eine Bibliothek wie libwichtig.a (static) oder libwichtig.so (shared) wird mit -lwichtig (ohne lib !) eingebunden.
Liegt die Bibliothek nicht in einem Standardpfad mit -Lverzeichnis den Pfad ergaenzen.

ldd dient nur zum anzeigen der shared libraries, die ein Programm benutzen wuerde.
libtool erleitchert das plattformuebergreifende erstellen von libraries (static und inbesondere shared) indem es sich um die Details kuemmert in denen sich die notwendigen Befehle unterscheiden.
ld ist der Linker, der uebersetzten Code (object files (*.o), shared libraries (*.so), static libraries (*.a)) zu ausfuehrbaren Programmen zusammensetzt.
ar setzt object files zu libraries zusammen.

Wird mit den compiler direkt ein executable erzeugt (ohne -c, -E, -S oder aehnlichem) ruft dieser den Linker mit den entsprechenden Standardoptioen und eventuell zusaetzlich angegeben libraries auf.

z.B.
gcc -I/nix/include -c test.c
erzeugt ein test.o (compiling), und
gcc -o test test.o -L/nix/lib -lwichtig
erzeugt das executable test (linking).
Auf einen Rutsch gehts mit:
gcc -I/nix/include -o test test.c L/nix/lib -lwichtig
(compiling & linking)

Achja -g (erzeuge Debuginformation) ist noch _sehr_ nuetzlich sollte man mit z.B. gdb auf Fehlersuche gehen.

Passende Links kann ich leider nicht finden.
Naja "man" und "info" sollten weiterhelfen .

Die SUNs auf denen ich ein login habe kennen kein "ucbcc", wohl nicht installiert.

Alle Klarheiten beseitigt ?

27-03-2001, 08:55
Vielen herzlichen Dank für die kompetente Antwort!

Schöne Woche

Stefan