Nut/Os

Jul 15, 2003 1 Replies

Witam! Ostatnimi czasy przesiadujê nad pisaniem aplikacji w systemie Nut/Os na AVR. Jest to system firmy egnite

formatting link
U¿ywam do kompilacji AVR GCC 3.3. Mam wersje 3.2 tego systemu. Mia³em problemy przy kompilacji: ppp.o(.text+0x15e): undefined reference to `NutEventWait' ppp.o(.text+0x372): undefined reference to `NutEventBroadcastAsync' ../../lib/gcc/atmega128\libnutdev.a(uartavr.o): In function `TxComplete': Wyczyta³em na li¶ci dyskusyjnej tego systemu ¿e wa¿na jest kolejno¶æ bibliotek. Moje pytanie jest takie: na czym dok³adnie polega linkowanie bibliotek? Jak na ch³opski rozum wyt³umaczyæ zawarto¶æ pliku Makefile: LIBS = $(LIBDIR)/nutinit.o -lnutdev -lnutnet -lnutpro -lnutnet - lnutfs -lnutos -lnutdev -lnutcrt -lnutos Prosi³bym o proste, choæ mo¿e w miarê jasne wyt³umaczenie co siê dzieje przy kompilacji na etapie linkowania bibliotek. Z góry dziêkujê za pomoc. Pozdrowionka Tomek


Cze¶æ

U¿ytkownik "Tomasz Kuty³a" napisa³ w wiadomo¶ci news: snipped-for-privacy@as3-5.krakow.dialup.inetia.pl...

Nut/Os na AVR.

`NutEventBroadcastAsync'

kolejno¶æ

bibliotek? Jak

$(LIBDIR)/nutinit.o -lnutdev -lnutnet -lnutpro -lnutnet -

dzieje przy

AFAIK to mniej wiêcej tak : /nutinit.o mówi, ¿eby dolinkowaæ plik relokowalny jw.

-lnutdev ...itd to lista bibliotek do przeszukania przez linker ( biblioteki w katalogu okre¶lonym przez LIBDIR ) Wg tej listy linker kolejno ( od lewej ) przeszukuje biblioteki ( libnutdev.a libnutnet.a ...itd. ) w poszukiwaniu symboli, do ktorych wcze¶niej wyst±pi³o odwo³anie. Je¶li biblioteki odwo³uj± siê do siebie wzajemnie to wa¿na jest kolejno¶æ ( je¶li np. gdzie¶ w którym¶ module libnutpro.a u¿yta jest jako zewnetrzna funkcja wkompilowana w libnutnet.a - to libnutpro musi byæ przed libnutnet ). Je¶³i odwo³uj± siê do siebie wzajemnie 'na krzy¿' to na li¶cie biblioteka jest ponowiona - do powtórnego przeszukania.

BTW - linker zawsze wkleja kod ca³ego modu³u relokowalnego

*.o - niezale¿nie ile funkcji z niego jest rzeczywi¶cie u¿ytych. Dlatego - jak ³atwo zauwa¿yæ w istniej±cych archiwach *.a

- na ogó³ lokuje siê ka¿d± funkcjê w oddzielnym module.

Przyk³adowo ostatecznie sformatowane wywo³anie linkera dla przyk³adu tcps :

C:\WinAVR\bin\avr-gcc.exe -mmcu=atmega128 -Wl,-Map=Nuttcps.map,--cr ef,-LC:\WinAVR\AvrSide\NutLib,--defsym=main=0 -o Nuttcps.elf nutinit.o tcps.o -lnutdev -lnutpro -lnutnet -lnutfs -lnutos -lnutcrt -lnutdev

-- Pozdrowienia Jurek Szczesiul

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required