Forum: Compiler & IDEs Was wird alles kompiliert??


von Stefan D. (endrox)


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!!

von A.K. (Gast)


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.

von Stefan D. (endrox)


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 :) .

von Wolfram (Gast)


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.



von OliverSo (Gast)


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

von OliverSo (Gast)


Lesenswert?


von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.