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

Undefined reference to method STM32CubeIDE

0 głosów
692 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 (195,240 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,360 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 (195,240 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 242 wizyt
pytanie zadane 28 maja 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 970 wizyt
pytanie zadane 28 czerwca 2022 w PHP przez Niecierpliwiec Nowicjusz (120 p.)
0 głosów
1 odpowiedź 592 wizyt

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...