logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[avr-gcc] problem z kompilacją

pgplus 15 Wrz 2010 18:54 1941 5
  • #1 8514183
    pgplus
    Poziom 11  
    Witam,
    Mam problem dotyczący kompilacji projektu za pomocą avrgcc. Przy kompilacji projektu wyrzuca mi następujące błędy:
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:287: undefined reference to `__eeprom_write_byte_1C1D1E'
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    

    gdzies wczesniej juz ktos o tym pisal. Podobno dołączył jakieś biblioteki do projektu. MOże wie ktoś co powinienem zlinkowac?
    Pozdrawiam
    pg
  • #2 8515193
    mirekk36
    Poziom 42  
    Zainstaluj sobie najnowszą wersję WinAvr to podstawa no i pokaż fragmenty swojego kodu gdzie odwołujesz się do pamięci EEPROM, żeby można było coś sensownego podpowiedzieć.
  • #3 8515262
    pgplus
    Poziom 11  
    1. mam wersje winavr- 20100110 czyli raczej jedna z najnowszych wersji (avr-gcc 4.3.3).
    2. problem pojawia sie przy linkowaniu biblioteki standardowej libeeprom.a Oto fragment logow z kompilacji:
    avr-gcc -mmcu=atmega1284p -Wl,-Map=shell.map server.o cmd.o shell.o serial.o uart.o   -L"C:\WinAVR-20100110\lib\gcc\avr\4.3.3"  -leeprom -lkernel -lc -leeprom -lkernel -lm -lobjc -lprintf_flt -lprintf_min -lscanf_flt -lscanf_min -lgcc -lgcov  -o shell.elf
    c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libeeprom.a(eeprom.o): In function `eeprom_write_byte':
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:287: undefined reference to `__eeprom_write_byte_1C1D1E'
    c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libeeprom.a(eeprom.o): In function `eeprom_read_byte':
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libeeprom.a(eeprom.o):c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: more undefined references to `__eeprom_read_byte_1C1D1E' follow
    make: *** [shell.elf] Error 1
    Build failed with 7 errors and 0 warnings...
    

    Coś tam czytałem o tym problemie tu ale nie wiem o co w tym chodzi.
    Myśle ze nie mam dołączonej jakiejs innej biblioteki. Zasugerowałem się postem z tego tematu.
    Sorry że nie podałem tych informacji wcześniej.
    I nie podaje kodu bo to nie ma sensu ze względu na to że byl on dostarczany przez producenta układu rzraven no i sam blad dotyczy biblioteki standardowej linkowanej wprost z folderow winavr.
  • #4 8515834
    Konto nie istnieje
    Konto nie istnieje  
  • #5 8516102
    BoskiDialer
    Poziom 34  
    A jak kompilowane są same źródła do postaci obiektów? Jeśli któryś plik źródłowy będzie napisany w c++ w którym to istnieje możliwość przeciążania funkcji, to kompilator analizując plik nagłówkowy będzie przyjmował możliwość przeciążania, a więc wewnętrznie nazwy będą posiadać sufiksy. Wtedy w pliku eeprom.h należy zrobić coś tego typu:
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    /* prototypy funkcji implementowanych w C */
    
    #ifdef __cplusplus
    }
    #endif


    Z drugiej strony niepokoi mnie mieszanie zasobów "winavr-20100110" z zasobami "winavr-20071221", plik libeeprom.a jest z tego nowszego i jak widać sprawia problemy.
  • #6 8517565
    pgplus
    Poziom 11  
    Witam ponownie.
    Uporządkowałem kilka rzeczy.
    1. ponownie zainstalowałem winavr
    2. przestalem dodawać biblioteki standardowe
    3. biblioteki libeeprom.a i libkernel.a nie są bibliotekami standardowymi. Zostały one dostarczone przez producenta tego układu rzraven a ja podczas meczenia sie z tym wszystkim skopiowałem je do folderu z bibliotekami standardowymi (żeby sie na poczatku nie bawić we wpisywanie forderów).
    4. biblioteki te zostały napisane pod winavrem z 2007 roku co wyczytalem w readme: ("The latest version as of this release of ASD is WinAVR 4.2.2 20071221.", było napisane) Sądziłem jednak że będą one działać z wersją nowszą...

    Nadal nic.

    Błędy są identyczne:
    avr-gcc -mmcu=atmega1284p -Wl,-Map=shell.map server.o cmd.o shell.o serial.o uart.o   -L"C:\avrStudio\lib\raven" -L"C:\avrStudio\projects\lib"  -lkernel -leeprom  -o shell.elf
    C:\avrStudio\projects\lib\libeeprom.a(eeprom.o): In function `eeprom_write_byte':
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:287: undefined reference to `__eeprom_write_byte_1C1D1E'
    C:\avrStudio\projects\lib\libeeprom.a(eeprom.o): In function `eeprom_read_byte':
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: undefined reference to `__eeprom_read_byte_1C1D1E'
    C:\avrStudio\projects\lib\libeeprom.a(eeprom.o):c:/winavr-20071221/bin/../avr/include/avr/eeprom.h:193: more undefined references to `__eeprom_read_byte_1C1D1E' follow
    make: *** [shell.elf] Error 1
    Build failed with 7 errors and 0 warnings...
    
    


    Podsumowując, spróbuje zainwestować w WinAVR 4.2.2 20071221 chociaż wolałbym nie. Macie inne pomysły? Gdzie można szukać tych bibliotek w nowszej wersji?

    POzdr
    pg
REKLAMA