Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 7 kwi 2026, o 12:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 14 maja 2014, o 21:15 
Offline
Nowy

Dołączył(a): 14 maja 2014
Posty: 3
Pomógł: 0

Witam,
dopiero zaczynam z programowaniem i nie potrafię się uporać z błędem "undefined reference to"

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i przy próbie kompilacji wyrzuca mi błędy
Kod:
**** Build of configuration Release for project Master ****

make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=8000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
Finished building: ../main.c
 
Building target: Master.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,Master.map -L"D:\ProjWork\Master" -mmcu=atmega16 -o "Master.elf"  ./main.o   
./main.o: In function `WypiszParametryRS':
main.c:(.text+0x30e): undefined reference to `rprintf1RamRom'
main.c:(.text+0x32c): undefined reference to `rprintfNum'
main.c:(.text+0x342): undefined reference to `rprintf1RamRom'
main.c:(.text+0x360): undefined reference to `rprintfNum'
main.c:(.text+0x376): undefined reference to `rprintf1RamRom'
main.c:(.text+0x394): undefined reference to `rprintfNum'
main.c:(.text+0x3aa): undefined reference to `rprintf1RamRom'
main.c:(.text+0x3cc): undefined reference to `rprintfNum'
main.c:(.text+0x3e2): undefined reference to `rprintf1RamRom'
main.c:(.text+0x404): undefined reference to `rprintfNum'
main.c:(.text+0x41a): undefined reference to `rprintf1RamRom'
main.c:(.text+0x43c): undefined reference to `rprintfNum'
main.c:(.text+0x452): undefined reference to `rprintf1RamRom'
main.c:(.text+0x474): undefined reference to `rprintfNum'
main.c:(.text+0x48a): undefined reference to `rprintf1RamRom'
main.c:(.text+0x4ac): undefined reference to `rprintfNum'
main.c:(.text+0x4c2): undefined reference to `rprintf1RamRom'
main.c:(.text+0x4e4): undefined reference to `rprintfNum'
main.c:(.text+0x4fa): undefined reference to `rprintf1RamRom'
main.c:(.text+0x51c): undefined reference to `rprintfNum'
main.c:(.text+0x532): undefined reference to `rprintf1RamRom'
main.c:(.text+0x552): undefined reference to `rprintfNum'
./main.o: In function `OdczytajPozycjeSpi':
main.c:(.text+0x5ca): undefined reference to `rprintf1RamRom'
main.c:(.text+0x5ec): undefined reference to `rprintfNum'
./main.o: In function `DoCommand':
main.c:(.text+0x818): undefined reference to `rprintf1RamRom'
main.c:(.text+0x83c): undefined reference to `rprintf1RamRom'
main.c:(.text+0x960): undefined reference to `rprintf1RamRom'
main.c:(.text+0x9da): undefined reference to `rprintf1RamRom'
main.c:(.text+0xa54): undefined reference to `rprintf1RamRom'
./main.o:main.c:(.text+0xae0): more undefined references to `rprintf1RamRom' follow
./main.o: In function `DoCommand':
main.c:(.text+0xda8): undefined reference to `rprintfNum'
./main.o: In function `__vector_11':
main.c:(.text+0xe58): undefined reference to `rprintf1RamRom'
main.c:(.text+0xeb4): undefined reference to `rprintf1RamRom'
./main.o: In function `main':
main.c:(.text+0xf16): undefined reference to `rprintfInitRS'
main.c:(.text+0xf30): undefined reference to `rprintf1RamRom'
main.c:(.text+0xf42): undefined reference to `rprintf1RamRom'
main.c:(.text+0xf54): undefined reference to `rprintf1RamRom'
main.c:(.text+0xf66): undefined reference to `rprintf1RamRom'
make: *** [Master.elf] Error 1

**** Build Finished ****

Oczywiście w folderze z main.c znajduje się rprintf.h

Będę wdzięczny z wszelkie wskazówki.
Pozdrawiam



Ostatnio edytowano 14 maja 2014, o 21:58 przez Ksk, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 21:25 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Kod w języku C należy wstawić wykorzystując listing kodu: [SYNTAX wybierz] i wybrać C. Edytuj post i zobaczysz, że lepiej wtedy wygląda. Kod z konsoli może tak zostać.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 21:34 
Offline
Nowy

Dołączył(a): 14 maja 2014
Posty: 3
Pomógł: 0

Antystatyczny napisał(a):
A masz również plik rprintf.c w tym folderze?

Nie sądziłem, że również jest potrzebny skoro nie ma odwołania do niego oraz nie wyświetla błędu z nim związanego.
Jednak faktycznie umieszczenie go odniosło skutek :) jednak pozostały jeszcze 3 ostrzeżenia (nie wiem czy się nimi przejmować ponieważ dotyczą "gotowej" biblioteki):

Kod:
No break at the end of case   rprintf.c   /Master   line 344   Code Analysis Problem
No break at the end of case   rprintf.c   /Master   line 367   Code Analysis Problem
No return, in function returning non-void   rprintf.c   /Master   line 320   Code Analysis Problem


Krauser napisał(a):
Kod w języku C należy wstawić wykorzystując listing kodu: [SYNTAX wybierz] i wybrać C. Edytuj post i zobaczysz, że lepiej wtedy wygląda. Kod z konsoli może tak zostać.

Będę pamiętać następnym razem :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 21:46 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Ostrzeżenie związane z brakiem instrukcji break należy zignorować. Jeśli dany case nie posiada break to wykona się kod następnego np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Brak zwracanej wartości w funkcji która ma coś zwrócić to błąd. Można dodać return 0; albo zmienić typ zwracany na void w pliku c i h

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2014, o 21:57 
Offline
Nowy

Dołączył(a): 14 maja 2014
Posty: 3
Pomógł: 0

Krauser napisał(a):
Brak zwracanej wartości w funkcji która ma coś zwrócić to błąd. Można dodać return 0; albo zmienić typ zwracany na void w pliku c i h


Sądziłem, że biblioteka powinna działać poprawnie. Błąd dotyczy fragmentu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

zmiana zmiennej na void (w obu plikach) skutkuje błędem

Kod:
Return has value, in function returning void   rprintf.c   /Master   line 337   Code Analysis Problem


dodanie "return=0;" w linii 51 usuwa ostrzeżenie, ale nie jestem przekonany poprawnego działania biblioteki po takiej modyfikacji. Mógłby ktoś potwierdzić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 maja 2014, o 18:15 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

W linii 18 masz return (0);. Wartość 0 jest zwracana jeśli funkcja nie znajdzie % w przekazanym łańcuchu znaków. Funkcja zwraca wartość. Błędem jest zatem, że nie każde rozgałęzienie tej funkcji zwraca wartość. Dopisanie return 0; na końcu usunie ostrzeżenie. Można dyskutować co zwróci bez tej dopisanej linijki. Kto chce niech sprawdzi, że zwróci 0.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO