Was wird alles kompiliert??

OP #479329
Lesenswert?
• ▲
▼
Hi an alle!!

Is vielleicht jetzt ne blöde Frage von mir, aber ich weiß nicht wirklich 
was alle kompiliert wird und was auf den Controller übertragen wird.

Etwas genauer:

Ich habe eine fertige LCD-Treiber-Bibliothek, die ich etwas modifiziert 
habe, dazu eine Testroutine.

Mich würde jetzt interessieren, ob jede Methode die sich in der 
Bibliothek befindet auch kompiliert wird und auf den Controller 
übertragen wird.

Ich denke mal, dass nur das Benutzte auch kompiliert und auf den 
Controller übertragen wird. Allerdings hatte ich bei einem Test 
plötzlich das Problem, dass der Speicher nicht ausreichte. Daher meine 
Frage.

Danke für alle Antworten!!
Gast #479341
Lesenswert?
• ▲
▼
Hängt vom Compiler ab. GCC zieht normalerweise alles mit, was in einem 
Quellfile drin ist. Ausser man hilft mit -ffunction-sections und evtl. 
auch -fdata-sections nach. Wenn das Linker-Script das erlaubt.
OP #479354
Lesenswert?
• ▲
▼
Ich benutze AVR Studio 4.12 mit einer aktuellen Version von WinAVR 
(Plugin).

@A.K.

Ok, dann werd ich mal die Direktiven versuchen. Wenn es nicht 
funktioniert muss man wohl seine Funktionen aus den einzelnen 
Bibliotheken zusammensuchen. Aber das ist ja eigentlich nicht der Sinn 
von Bibliotheken. Ich habe gedacht, der Compiler holt sich nur die 
Methoden, die ausgehend von der main-Methode auch benutzt werden. Aber 
naja, ist halt nur ne Maschine, kann man nicht so viel Intelligenz 
erwarten :) .
Gast #479444
Lesenswert?
• ▲
▼
>Ich habe gedacht, der Compiler holt sich nur die
>Methoden, die ausgehend von der main-Methode auch benutzt werden. Aber
>naja, ist halt nur ne Maschine, kann man nicht so viel Intelligenz
>erwarten :)

Man kann so viel Intelligenz erwarten, wie in die programmierte 
Umsetzung gesteckt wurde. C ist eine Programmiersprache die das tut was 
du sagst, für das Denken bist du zuständig.

Was du beschreibst ist durch das Bibliothekenprinzip (Library) gedeckt.
Voraussetzung:
jede Funktion in der Library die du benutzt, wurde einzeln kompiliert 
und die kompilierten Module wurden in einer Library zusammengefasst.
Das innerhalb eines Moduls unbenutzte Funktionen nicht mit eingefügt 
werden kommt erst allmählich auf. Ausserdem ist für der Linker und nicht 
der Compiler für etwas derartiges zuständig.


Gast #479454
Lesenswert?
• ▲
▼
Der Compiler kennt normalerweise nur das, was in dem gerade kompilierten 
Sourcefile drinsteht. Daher werden zunächst mal alle Funktionen, die 
drin sind, auch kompiliert. (=in Maschinecode übersetzt). Das ist dann 
aber noch kein lauffähiges Programm.

Den Rest macht dann der linker. Und der ist schlau genug, nur die 
Funktionen ins fertige hex-file zu packen, die dort auch benötigt 
werden. Umgekehrt fällt auch erst beim linken auf, ob nicht doch eine 
irgendwo mal aufgerufene Funktion fehlt.

guggst du auch hier:
Beitrag "Linker dynamisch?"

Oliver
Moderator Persönliche Seite #479702
Lesenswert?
• ▲
▼
OliverSo wrote:

> Den Rest macht dann der linker. Und der ist schlau genug, nur die
> Funktionen ins fertige hex-file zu packen, die dort auch benötigt
> werden.

Nein.  Er packt die Objektmodule aus einer Bibliothek hinzu, die
helfen, ein derzeit undefiniertes externes Symbol zu befriedigen.
Der Objektmodul wird aber komplett reingepackt, ein Konzept einer
Funktion oder etwas derartigem kennt der Linker gar nicht.  Der
kennt nur Objektmodule und Symbole.

(-ffunction-sections und -gc-sections ist eine Krücke, die etwas
vergleichbares emuliert.  Der Linker bekommt in diesem Falle das
Konzept der Funktionen in Form von memory sections ,,hintenrum''
aufgedrängelt.)

All das aber in der Annahme, dass der OP mit ,,Bibliothek'' auch
wirklich eine Objektmodulbibliothek im Sinne des Linkers gemeint
hat.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.