Forum: Compiler & IDEs Eclipse CDT: Linkerfehler


von Benajmin Buxbaum (Gast)


Lesenswert?

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.

von hp-freund (Gast)


Lesenswert?

Die Angabe der vollständigen Fehlermeldung könnte helfen.
Oder hänge das Projekt einfach an.

von Benajmin Buxbaum (Gast)


Lesenswert?

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

von Benajmin Buxbaum (Gast)


Lesenswert?

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!

von hp-freund (Gast)


Lesenswert?

Wo liegt die hal_uart.c sonst?
Hast Du ein Index rebuild ausgeführt?

von Benajmin Buxbaum (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


Lesenswert?

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.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.