Eclipse CDT: Linkerfehler

Gast #4763688
Habe folgenden Code unter Eclipse CDT erstellt
1
#include "stm32f4xx_hal.h"
2
#include "stm32f4xx_hal_gpio.h"
3
#include "stm32f4xx_hal_uart.h"
4

5
static void SystemClock_Config(void);
6
int main(void) {
7
  HAL_Init();
8

9

10

11
  unsigned char message[] = "Hello UART!\n";
12

13
  SystemClock_Config();
14
  __HAL_RCC_GPIOA_CLK_ENABLE();
15

16

17
  GPIO_InitTypeDef GPIOinit;
18
  GPIOinit.Pin = GPIO_PIN_0 | GPIO_PIN_1;
19
  GPIOinit.Mode = GPIO_MODE_AF_PP;
20
  GPIOinit.Pull = GPIO_PULLUP;
21
  GPIOinit.Speed = GPIO_SPEED_FAST;
22
  GPIOinit.Alternate = GPIO_AF8_UART4;
23
  HAL_GPIO_Init(GPIOD, &GPIOinit);
24

25
  UART_HandleTypeDef uart4;
26
  uart4.Instance = UART4;
27
  uart4.Init.BaudRate = 9600;
28
  uart4.Init.WordLength = UART_WORDLENGTH_8B;
29
  uart4.Init.StopBits = UART_STOPBITS_1;
30
  uart4.Init.Parity = UART_PARITY_NONE;
31
  uart4.Init.Mode = UART_MODE_TX_RX;
32
  HAL_UART_Init(&uart4);
33

34
  HAL_UART_Transmit(&uart4, message, 12, 100);
35

36
  while (1) {
37

38
  }
39
}
(Clock Config ist in der Uebersicht weggelassen)
Sources und Includes fuer die HAL-Library sind im Suchfad vorhanden.
Wenn ich nun bauen lasse, werden alle Typedefs erkannt, und die Sources 
fuer Clock Config, GPIO usw. sauber kompiliert. Der Linker beschwert 
sich danach allerdings, dass er kein Objectfile fuer die UART-Funktionen 
finden kann.

Suche nun schon ewig, wie ich Eclipse dazu bringen kann, den Code fuer 
den UART auch automatisch mit zu kompilieren, finde aber nix. Was mache 
ich falsch?
In der Shell kompilieren und das Objectfile per Hand an der richtigen 
Stelle ablegen ginge zwar, ist aber sicher nicht die elganteste Loesung.
Gast
Das hier kommt vom Linker:
1
/home/myhost/workspace/stm32_playground/Debug/../src/main.c:98: undefined reference to `HAL_UART_Init'
2
collect2: error: ld returned 1 exit status
3
make: *** [makefile:64: stm32_playground.elf] Fehler 1
Gast
Wenn ich die hal_uart.c direkt in den src-Ordner kopiere, geht es. Als 
Hack wahrscheinlich ganz okay, aber mich wuerde trotzdem interessieren, 
was ich falsch mache!
Gast
Eclipse CDT mit dem STM32-Plugin legt beim Anlegen eines Projekts die 
komplette HAL-Library in einen Unterordner:

system/src/stm32f4-hal

Der Ordner ist auch im Suchpfad vom Compiler, und die Dateien fuer RCC 
und GPIO werden dort auch geunden. Index Rebuild habe ich probiert, 
macht leider keinen Unterschied.
Eclipse unterscheidet bei Ordnern im Projekt zwischen normalen und 
Source-Ordnern. Nur in letzteren werden Source-Dateien auch kompiliert.

Schau dir halt mal die Ordnertypen an.

Oliver
P.S. Das gilt natürlich nur für von Eclipse gemanagte Projekte. Bei 
makefileprojekt musst du halt ins makefile schauen, und das entsprechend 
anpassen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.