thepower
Anmeldungsdatum: 2. Januar 2010
Beiträge: 65
|
Guten Tag, 🙄
bin gerade am lernen wie man mit gtkmm programmieren kann. (http://library.gnome.org/devel/gtkmm-tutorial/unstable/index.html) Jetzt zu meinem eigentlichen Problem, ich suche die source-codes des gcc (g++) um zu verstehen wie die verschiedenen Funktionen programmiert werden (z.b. printf(...) oder die verschiedenen Cairo Methoden... wo find ich da was mit sudo find / -iname 'printf.*' bekomme ich folgende Ausgabe:
[sudo] password for kjs:
/usr/lib/perl/5.10.1/auto/POSIX/printf.al
/usr/src/linux-headers-2.6.32-22-generic/include/config/binary/printf.h
/usr/src/linux-headers-2.6.32-23-generic/include/config/binary/printf.h
/usr/src/kernel_31sources/arch/m68k/sun3/prom/printf.c
/usr/src/kernel_31sources/arch/x86/boot/printf.c
/usr/src/kernel_31sources/arch/sparc/prom/printf.c
/usr/src/linux-source-2.6.32/arch/m68k/sun3/prom/printf.c
/usr/src/linux-source-2.6.32/arch/x86/boot/printf.c
/usr/src/linux-source-2.6.32/arch/sparc/prom/printf.c
/usr/include/printf.h
/usr/share/gettext/intl/printf.c
/usr/share/man/man1/printf.1.gz
/usr/share/man/man3/printf.3.gz
jetzt, guck ich in libc, bzw. /usr/lib/ mit ar -t libc.a bekomm ich eine ganze latte an ausgaben mit Objectfiles... woher weiss ich welcher Quellcode zu welchem objectfile gehört???
Hier ein kleiner Teil der Ausgabe:
279 cuserid.o
280 _itoa.o
281 _itowa.o
282 itoa-digits.o
283 itoa-udigits.o
284 itowa-digits.o
285 vfprintf.o
286 vprintf.o
287 printf_fp.o
288 reg-printf.o
289 printf-prs.o
290 printf_fphex.o
291 reg-modifier.o
irgendwie blick ich nicht durch wo ich gucken muß wie diese Funktion programmiert wird ☹ Bearbeitet von Into the Pit: Bitte verwende doch Code-Blöcke, um die Übersicht hier im Forum zu verbessern, Danke.
|
agaida
Anmeldungsdatum: 24. Februar 2010
Beiträge: 3348
Wohnort: Bielefeld
|
Die Sourcen kannst Du Dir runterladen: agaida@lucidramme:~$ aptitude search gcc
p colorgcc - Einfärbung für GCC Warn-/Fehlermeldungen
i gcc - Der GNU C-Compiler
p gcc-4.1 - Der GNU C-Compiler
p gcc-4.1-base - GNU Compiler-Collection (Basis-Paket)
p gcc-4.1-doc - Documentation for the GNU compilers (gcc,
p gcc-4.1-locales - Der GNU C-Compiler (Unterstützung Ihrer Mu
p gcc-4.1-multilib - The GNU C compiler (multilib files)
p gcc-4.1-source - Source of the GNU Compiler Collection
p gcc-4.3 - Der GNU C-Compiler
p gcc-4.3-base - GNU Compiler-Collection (Basis-Paket)
p gcc-4.3-doc - Documentation for the GNU compilers (gcc,
p gcc-4.3-locales - Der GNU C-Compiler (Unterstützung Ihrer Mu
p gcc-4.3-multilib - The GNU C compiler (multilib files)
p gcc-4.3-source - Source of the GNU Compiler Collection
i gcc-4.4 - Der GNU C-Compiler
i gcc-4.4-base - GNU Compiler-Collection (Basis-Paket)
i A gcc-4.4-doc - Dokumentation für die GNU-Compiler (gcc, g
p gcc-4.4-locales - Der GNU C-Compiler (Unterstützung Ihrer Mu
i A gcc-4.4-multilib - The GNU C compiler (multilib files)
p gcc-4.4-plugin-dev - Files for GNU GCC plugin development.
i gcc-4.4-source - Quellen der GNU-Compiler-Sammlung
p gcc-avr - Der GNU C Compiler (Cross Compiler für avr
i gcc-doc - Dokumentation für die GNU-C-Compiler (gcc,
p gcc-mingw32 - The GNU Compiler Collection (cross compile
i A gcc-multilib - The GNU C compiler (multilib files)
p gcc-snapshot - A SNAPSHOT of the GNU Compiler Collection
p gccxml - XML output extension to GCC
i A lib32gcc1 - GCC support library (32 bit Version)
p lib32gcc1-dbg - GCC support library (debug symbols)
i libgcc1 - GCC Support-Bibliothek
p libgcc1-dbg - GCC support library (debug symbols)
p libsoci-core-gcc - C++ Database Access Library (core)
p libsoci-core-gcc-dbg - C++ Database Access Library (debug symbols
p libsoci-core-gcc-dev - C++ Database Access Library (devel)
p libsoci-mysql-gcc - C++ Database Access Library (MySQL backend
p libsoci-postgresql-gcc - C++ Database Access Library (PostgreSQL ba
p libsoci-sqlite3-gcc - C++ Database Access Library (SQLite3 backe
v llvm-gcc -
und
i A g++ - Der GNU C++-Compiler
p g++-4.1 - Der GNU C++-Compiler
p g++-4.1-multilib - The GNU C++ compiler (multilib files)
p g++-4.3 - Der GNU C++-Compiler
p g++-4.3-multilib - The GNU C++ compiler (multilib files)
i A g++-4.4 - Der GNU C++-Compiler
i g++-4.4-multilib - The GNU C++ compiler (multilib files)
i g++-multilib - The GNU C++ compiler (multilib files) apt-get source paketname Ich glaube aber nicht, dass Du dich da wirklich durcharbeiten willst 😈
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4676
Wohnort: Berlin
|
@thepower: Wie soll Dir die Implementierung der C-Funktion printf() beim lernen von einer C++-Anbindung an Gtk+ weiterhelfen!? printf() wird wahrscheinlich Quelltext enthalten beziehungsweise aufrufen um die Formatspezifizierer durch die Werte zu ersetzen und dann die entsprechenden Systemaufrufe zur Ausgabe tätigen. Das ist richtig low-level, also ziemlich weit von Anwendungsprogrammierung mit einem GUI-Toolkit entfernt.
|
thepower
(Themenstarter)
Anmeldungsdatum: 2. Januar 2010
Beiträge: 65
|
Tja, warscheinlich ist es low-level-programmierung, und da hab ich überhaupt keine Ahnung von... Aber gerade deshalb möchte ich mich da reinbaggern, damit ich verstehe was die "Funktionen" die ich benutze auch machen, bzw. wie sie gebaut werden, nur wer addieren und multiplizieren verstanden hat, kann irgendwann mit der infinitesimalrechnung anfangen denke ich, und gleichgültig wo ich versuche zu lernen, ob aus Literatur, informatikstudium als gasthörer oder in Kursen wofür ich viel geld bezahle erklärt mir niemand wie die Grundlagen aussehen, also habe ich wohl keine andere Möglichkeit als sie dort zu lernen wo damit gearbeitet wird... ☹
Vielen Dank, Ihr, habt mir sehr geholfen ☺
|
Vain
Anmeldungsdatum: 12. April 2008
Beiträge: 2505
|
Sachen wie printf sind übrigens in der libc und nicht im gcc ausprogrammiert. Bevor du dich jetzt aber an die übliche GNU libc ranmachst, fang vielleicht lieber erstmal mit Fefes dietlibc an. Das ist immernoch super kompliziert, aber bei weitem nicht so hart wie die glibc (nicht zu verwechseln mit der GLib übrigens). Tipps für solche archeologischen Arbeiten: Suche heraus, in welcher Headerdatei die Funktion deines Interesses deklariert wird. Das geht zum Beispiel über man 3 printf (du willst die Manpage aus Sektion 3, bei nur man printf landest du vermutlich bei dem printf aus den GNU coreutils – das ist was anderes), was dir verrät, dass es in stdio.h zu finden ist. Da kann man schonmal anfangen zu schauen. Bei printf wird es nicht der Fall sein, aber hin und wieder sind vermeintliche Funktionen einfach nur Präprozessormakros. Dann wirst du vielleicht direkt in der Headerdatei fündig, aber das ist wirklich selten. Wenn du in der Headerfile keine neuen Informationen erhältst, kannst du dich entweder mit grep manuell durch die Dateien wühlen (hey, ein bisschen Schweiß muss sein 😉) oder du verwendest sowas wie ctags in Verbindung mit einem Plugin für den Editor deiner Wahl. Oder ich lese gerade, dass Geany sowas ähnliches wie ctags schon integriert hat. Musst du mal schauen. Dann kannst du schön durch die Dateien navigieren und direkt zu den Deklarationen springen. Im Falle der dietlibc und printf landest du dann beispielsweise in lib/__v_printf.c bei der Funktion __v_printf() . Dort kannst du versuchen, die fast 400 Zeilen lange Implementierung zu verstehen. 😀 Alternativ geht bestimmt auch sowas wie Eclipse, aber da läufst du Gefahr, dass du wichtige Details verpasst, weil dir zu viel Arbeit abgenommen wird. Sinn der Sache ist ja, dass du möglichst viel dabei lernst.
Viel Spaß. ☺
|
thepower
(Themenstarter)
Anmeldungsdatum: 2. Januar 2010
Beiträge: 65
|
Vielen Dank Vain,
🙄 bitte, ich finde eure Tipps sehr informativ, nur bedenkt bitte, ich habe Koch gelernt und habe weder von elektrotechnik die geringst ahnung noch habe ich programmieren gelernt. Zu Linux bin ich gekommen weil ich Windoof grausam finde und versuche nun die Grundlagen zu lernen/verstehen. Leider ist bei mir der Unterbau ziemlich dünn. Bitte so, daß ich einen Nutzen ziehen kann. Englisch spreche ich, und evtl. einfach irgendwelche links wo ich die entsprechende Information nachlesen und verstehen kann...
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
thepower schrieb: Tja, warscheinlich ist es low-level-programmierung, und da hab ich überhaupt keine Ahnung von... Aber gerade deshalb möchte ich mich da reinbaggern, damit ich verstehe was die "Funktionen" die ich benutze auch machen, bzw. wie sie gebaut werden
Da bin ich anderer Meinung. Gerade als Programmieranfänger, aber auch als "Profi" im alltäglichen Gebrauch, möchte man oft, dass einem viel Arbeit abgenommen wird - aus diesem Grund wurden Bibliotheken ja gerade erfunden. Sofern du also nicht selber eine Bibliothek programmieren willst, die Lowlevel-Kram abstrahiert, würde ich mich lediglich mit dem vertraut machen, was du im Endeffekt benutzt. Teste ruhig für jeden Aufruf verschiedene Übergabewerte, lies vor allem die Doku aufmerksam (sofern sie brauchbar ist), schau dir als Beispiele die *Verwendung* statt dem Quelltext der Funktion an, usw. Kurz gesagt: Mache dir klar, was in jeder Zeile deines Programms als Ergebnis passiert. Alles was "unterhalb" der offiziellen API gemacht wird, sollte dir gerade bei einem GUI-Toolkit egal sein können.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
thepower schrieb: .... Bitte so, daß ich einen Nutzen ziehen kann.
☺ Kann ich schon verstehen, dass das erstmal viel Holz ist. Aber Vain hat schon die wichtigsten Schritte für Dich herausgeschält. Viel einfacher geht es hier kaum. Eines kann ich Dir sagen als jemand der selber mit seinem Denken sehr von der Assembler-Schiene her kommt. Bei so einem komplexen System wie LINUX kommst Du mit dem Ansatz, zuerst die Module verstehen zu wollen, nicht mehr gut voran. So eine Büchse ist dafür einfach viel zu komplex. Da bringt die Denkweise von den modernen Programmiersprachen und von *nix selber mehr: zuerst von den Funktionen ("was will ich erreichen") her die Sache zu betrachten, und nur punktuell dann soweit in die Niederungen der Maschinenbefehle abzusteigen wie unbedingt nötig. Einfach, weil man sich sonst bei zig Millionen Zeilen Code völlig verzettelt. In dem Sinne: nimms einfach erstmal gelassen, die Details wirst Du mit der Zeit schon noch verstehen. ☺ LG, track
|