[elektro] Mámegin Cééé
SZIGETI Szabolcs
szigiszabolcs at gmail.com
Wed May 8 22:49:03 CEST 2013
Hali!
Itt valahol valami eltéved. Vagy még korábban hiányzik egy ;, vagy }
vagy akármi, vagy pedig valaki galád módon egy #define-nal
átdefiniálja a BYTE-ot itt.
Az #include és a linker két különböző dolog. Az #include gyakorlatilag
szöveg szerint összeollózza a forrásokat és az így keletkező forrást
fordítja le. A linker pedig már a lefordított objectekkel dolgozik,
azokat fűzi össze egy futtathatóba. Ennek ugye az az értelme, hogy nem
feltétlenül kell hosszadalmasan újra fordítani, ami nem változott,
vagy akár binárisban is odaadhatsz dolgokat, amit nem akarsz
forrásban. Természetesen az object önmagában nem futtatható, ha
mondjuk egy változóra hivatkozik, vagy függvényt hív, amely egy másik
objectben van, a valódi memória címet csak a linker fogja kitölteni.
Ha van olyan hivatkozás, amelyhez nem tartozik object (a lib is az),
az linkelési hiba lesz.
Az ifndef dolgokat jól látod, arra szolgál, hogy nem húzza be
többször. Lehet, hogy a warningot ettől függetlenül feldolgozza a
preprocesszor, vagy kívül esik a védő ifndef-eken kívül.
Szabolcs
Skandar Graun <sgraun at gmail.com> írta (2013. május 8. 21:52):
> Visszaírtam BYTE-ra.
>
> C:\project\ec_paka\pakadisp\pakadisp_vars.c:133: error: syntax error before
> '*' token
> C:\project\ec_paka\pakadisp\pakadisp_vars.c:133: warning: type defaults to
> 'int' in declaration of 'sbuf_wr_pointer'
> C:\project\ec_paka\pakadisp\pakadisp_vars.c:133: warning: data definition
> has no type or storage class
>
> Egyébként millió helyen használja a byte-ot, de csak ennél jelez hibát.
>
> Ezt a linker hibát hol tudom megnézni?
> Egyébként nekem kissé homályos, hogy attól, hogy a project tree-be
> felteszek egy filét, az hogy fordul bele a végleges programba.
> Valamint hova?
> Megszoktam, hogy legalább egy #include utasítás kell valahová
> hivatkozásként.
>
> Többszörös fordítás: A .h file-ok elején van egy #ifndef bigyó #define
> bigyó feltétel és utána jön maga a file. Ez arra lenne jó, hogy ha több
> helyről hívják meg véletlenül a filét, ne forduljon kétszer-háromszor,
> hülye hibákat okozva.
> De hogy lássam, mi is történik, a figyelt helyekre beírok egy #warning
> "hihi" parancsot... viszont ez néha 4-5-ször is megjelenik, olyan, mintha
> pont nem nagyon érdekelné az ifndef szerkezet...Ezt mi csinálhatja?
>
>
>
>
>
>
>
>
>
>
>
> 2013. május 8. 21:40 SZIGETI Szabolcs írta, <szigiszabolcs at gmail.com>:
>
>> Hali!
>>
>> Szerintem az a BYTE valahol máshol is typedefelve (vagy rosszabb
>> #define-olva van) valamelyik includeban vagy forrásban. Jó lenne
>> tudni, hogy mi a hibaüzenet azon túl, hogy "nem fogadja el". Az is
>> lehet, hogy valahol többszörösen van ugyanaz az include behúzva, bár
>> azt illene védenie és nem is ez lenne a legvalószínűbb hibaüzenet.
>>
>> A második esett tipikus linker hiba, vagy hiányzik egy fájl, vagy nem
>> fordul le, amelyben az undefined reference-ben hivatkozott
>> változók/függvények vannak. Vagy hiányzik a projectből a forrás, vagy
>> ha objectben van (lib vagy o) akkor az.
>>
>> Szabolcs
>>
>>
>> Skandar Graun <sgraun at gmail.com> írta (2013. május 8. 20:13):
>> > Na, a megszokott őrület megint beköszöntött.
>> >
>> > Egész normálisan haladtam a C programmal, kezdtem örülni.
>> > Jött az a rész, amikor USB-t kellene indítani a cuccban.
>> > Betöltöttem egy mintaprojectet, lefordítottam.
>> > Siker.
>> > Bedugom a pendrive-ot, megjelenik a file, siker.
>> > Sajnos elkezdtem örülni.
>> > Nem kellett volna.
>> > Ugyanis azóta a két projectet nem tudom összefésülni, számomra misztikus
>> > hibaüzenetek miatt.
>> >
>> > Van egy generictypedefs.h file. Ebben van deklarálva a byte típus.
>> >
>> > typedef unsigned char BYTE;
>> >
>> > De a projectbe beemelt, változókat tartalmazó file két soránál nem
>> fogadja
>> > el a BYTE típust.
>> > Ha oda beteszem az előző typedef sort, akkor meg pattog, hogy kétszer van
>> > deklarálva.
>> > A két ominózus sort
>> >
>> > unsigned char *sbuf_wr_pointer;
>> > unsigned char *sbuf_rd_pointer;
>> >
>> > erre a formára írtam át. Ezt megette.
>> >
>> > Ellenben olyan deklarációkat nem lát, nem fogad el, ami eddig ment... de
>> > hegyekben.
>> > Egy változókat tartalmazó file betétele a project tree-be kb 80
>> > hibaüzenetet generált, elsősorban a filekezelésben.
>> >
>> > Objects\C30\usb_host.o(.text+0xb28): In function `USBHostTasks':
>> > C:\project\ec_paka\pakadisp\Include\USB\usb_host.c:2284: undefined
>> > reference to `usbClientDrvTable'
>> >
>> Objects\C30\usb_host.o(.text+0xb4e):C:\project\ec_paka\pakadisp\Include\USB\usb_host.c:2299:
>> > undefined reference to `usbClientDrvTable'
>> > Objects\C30\usb_host.o(.text+0xdaa): In function `_USB_FindClassDriver':
>> > C:\project\ec_paka\pakadisp\Include\USB\usb_host.c:2880: undefined
>> > reference to `usbTPL'
>> >
>> Objects\C30\usb_host.o(.text+0xdac):C:\project\ec_paka\pakadisp\Include\USB\usb_host.c:
>> > undefined reference to `usbTPL'
>> > Objects\C30\usb_host.o(.text+0xe28): In function
>> > `_USB_FindDeviceLevelClientDriver':
>> > C:\project\ec_paka\pakadisp\Include\USB\usb_host.c:2952: undefined
>> > reference to `usbTPL'
>> >
>> > Ezekhez abszolút nem nyúltam, ha keresem, mindet megtalálom. Nem
>> > változtattam include path-t, pusztán ennyit tettem.
>> >
>> > Mit csinálok rosszul?
>> > -----------------------------------------
>> > elektro[-flame|-etc]
>>
>> -----------------------------------------
>> elektro[-flame|-etc]
>>
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list