[elektro] atmel raven + firmware + kibogarászás -> káosz

Moczik Gabor pm_levlista at progzmaster.hu
Tue Dec 8 09:04:29 CET 2009


DemonBob wrote:
> A kérdés az lett volna hogy a headerben deklarált függvényt miképp köti 
> össze egy ránézésre (forráskód alapján) köze nincs hozzá c fájl 
> függvényéhez. Egyikben sincs hivatkozás a másikra, csak a függvény neve 
> azonos, így valószínűsítem arról van szó.

A függvény neve + a paraméterek és a visszatérési értékek típusából 
képzett ún. szignatúra alapján azonosítja a linker. A fordító 
megelégszik azzal hogy deklaráltad a függvényt, tudja szintaktikailag 
ellenőrizni és a megfelelő paraméter átadáshoz előkészítheti a stack-et. 
A call utasítást is legenerálja, de a címet nem tölti ki. Az így 
elkészített félkész bináris fájl a tárgykód (object), minden 
forrásfájlból készül egy-egy.

Ezután a linker dolga hogy a tárgykódokban lévő függvényeket a kész 
binárisban elhelyezze, majd a szignatúra alapján a végleges címeket 
beillessze a call és egyéb utasításokhoz.


Egyébként ha sikeresen include-olod a deklarációt, de nem fordítod hozzá 
a forrást ami a definíciót is tartalmazza, akkor nem a gcc fog 
hibaüzenetet adni hanem a linker (undefined symbol).
Ha a definícióban más a paraméterek típusa mint a deklarációban, akkor 
is a linker fog jelezni (singatures do not match).



More information about the Elektro mailing list