[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