• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Undefined reference to method STM32CubeIDE

Object Storage Arubacloud
0 głosów
425 wizyt
pytanie zadane 3 czerwca 2022 w C i C++ przez Maciek1666 Nowicjusz (220 p.)

Cześć,

mam problem którego nie mogę rozwiązać od kilku tygodni. Pobrałem projekt przykładowy STM który niestety ma błędy w konfiguracji. Próbując je naprawić zatrzymałem się na takim błędzie:

Struktura projektu:

Problem:

W pliku sys_sensors.c dostaję informację o braku referencji do definicji kilku metod. Po kliknięciu na dowolną z tych metod z wciśniętym CTRL przenosi mnie do pliku: iks01a2_env_sensors.h. To chyba znaczy, że plik został zindeksowany więc nie rozumiem czemu kompilator go nie widzi. Plik iks01a2_env_sensors.h jest zaincludowany w sys_sensors.h, który z kolei jest zainkludowany w sys_sensors.c. Bezpośredni include pliku iks01a2_env_sensors.h w sys_sensors.c nic nie zmienił. Deklaracje metod w tym pliku:

int32_t IKS01A2_ENV_SENSOR_Init(uint32_t Instance, uint32_t Functions);
int32_t IKS01A2_ENV_SENSOR_DeInit(uint32_t Instance);
int32_t IKS01A2_ENV_SENSOR_GetCapabilities(uint32_t Instance, IKS01A2_ENV_SENSOR_Capabilities_t *Capabilities);
int32_t IKS01A2_ENV_SENSOR_ReadID(uint32_t Instance, uint8_t *Id);
int32_t IKS01A2_ENV_SENSOR_Enable(uint32_t Instance, uint32_t Function);
int32_t IKS01A2_ENV_SENSOR_Disable(uint32_t Instance, uint32_t Function);
int32_t IKS01A2_ENV_SENSOR_GetOutputDataRate(uint32_t Instance, uint32_t Function, float *Odr);
int32_t IKS01A2_ENV_SENSOR_SetOutputDataRate(uint32_t Instance, uint32_t Function, float Odr);
int32_t IKS01A2_ENV_SENSOR_GetValue(uint32_t Instance, uint32_t Function, float *Value);

Próbowałem przenoszenia tego pliku bezpośrednio do folderu w którym jest sys_sensors.c  ale żadna konfiguracja nie rozwiązywała problemu.

Będę wdzięczny za podpowiedzi

komentarz 3 czerwca 2022 przez j23 Mędrzec (194,920 p.)
No a wszystkie niezbędne pliki źródłowe .c zostały (poprawnie) dodane projektu? Czy tylko skopiowałeś je do katalogu z projektem?
komentarz 3 czerwca 2022 przez Oscar Nałogowiec (29,320 p.)

@Maciek1666,  Kompilator widzi plik .h, stąd kompilacja przechodzi. Wykłada się na linkowaniu bo w projekcie nie ma wskazanyc funkcji/metod. Nie znam tego IDE, ale tak przez analogie, prawdopodobnie musisz dodać do projektu plik .c opisany nagłowkiem iks01a2_env_sensors.h, więc być może to ma być plik iks01a2_env_sensors.c. Sugerują to też nazwy tych brakujących metod.

komentarz 3 czerwca 2022 przez Maciek1666 Nowicjusz (220 p.)

Tego właśnie nie jestem pewien. Skopiowałem plik sensors.c do katalogu:

C:\Users\Lisu\STM32CubeIDE\workingAT0306edit\Projects\NUCLEO-L073RZ\Applications\LoRaWAN\LoRaWAN_AT_Master\Core\Src

W Source Locations mam cały katalog projektu:

Ale pliki do tego katalogu są zaciągane z katalogów które są "wyżej" niż katalog projektu. Ścieżka katalogu projektu to:

C:\Users\Lisu\STM32CubeIDE\workingAT0306edit\Projects\NUCLEO-L073RZ\Applications\LoRaWAN\LoRaWAN_AT_Master\STM32CubeIDE\I_NUCLEO_LRWAN1

A pliki źródłowe, nagłówkowe itd są pobierane z katalogów: Core, LoRaWAN:

Ja dodałem plik sys_sensors.c do katalogu Core/Src widocznego na scrrenie wyżej. Czy coś jeszcze powinienem zrobić żeby ten plik był poprawnie dodany?

komentarz 3 czerwca 2022 przez Maciek1666 Nowicjusz (220 p.)

@Oscar, dodałem plik iks01a2_env_sensors.c w katalogu: C:\Users\Lisu\STM32CubeIDE\workingAT0306edit\Projects\NUCLEO-L073RZ\Applications\LoRaWAN\LoRaWAN_AT_Master\Core\Src  ale nie został on zaciągnięty do projektu tak jak inne pliki źródłowe z tego katalogu... Nie wiem czemu tak się dzieje, gdzieś się określa które pliki powinny być importowane do projektu?

 

komentarz 3 czerwca 2022 przez j23 Mędrzec (194,920 p.)

Jeśli to jest zewnętrzna biblioteka, to najprawdopodobniej musisz ją skompilować i dodać do projektu (zakładka Libraries) plik, który jest efektem tej kompilacji.

Sprawdź w katalogach biblioteki (najczęściej katalog Lib, ale może być też Bin), czy nie ma tam przypadkiem już skompilowanej biblioteki. Wtedy wystarczy - jak wspomniałem - dodać plik biblioteki do projektu i błędy "undefined reference..." powinny zniknąć.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
2 odpowiedzi 175 wizyt
pytanie zadane 28 maja 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 465 wizyt
pytanie zadane 28 czerwca 2022 w PHP przez Niecierpliwiec Nowicjusz (120 p.)
0 głosów
1 odpowiedź 472 wizyt

92,588 zapytań

141,439 odpowiedzi

319,688 komentarzy

61,974 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...