Forum: Mikrocontroller und Digitale Elektronik Neueinstieg in "Eclipse" - C Projekt


von Frank H. (Gast)


Lesenswert?

Hallo Freunde der Programmierung,

Wollte gerade mal ein bisschen was mit "Eclipse" machen und siehe da, 
schon das erste Problem.

Wenn ich eine externe Headerdatei einbinden möchte, erkennt er zwar die 
Struktur die dort enthalten ist aber nicht die Funktionen.
Woran kann das liegen?
1
#include <stdio.h>
2
#include "C:\Users\Frank\Dropbox\C - Programmieren\C-Librarys\trunk\Kommando Interpreter\cmd.h"
3
4
void *cmdOK ( void *x , void *y )
5
{
6
  printf("CMD_OK\r\n");
7
8
  return (char*)0;
9
}
10
11
12
int main ()
13
{
14
  cmd_struct cmd[] =
15
  {
16
    {"Relais setzen"     ,   "-KS"  ,   cmdOK   },
17
    {"Relais löschen"    ,   "-KU"  ,  cmdOK  },
18
    {"Uhrzeit stellen"    ,  "-US"  ,  cmdOK  },
19
    {"Spannung lesen"    ,  "-UL"  ,  cmdOK  },
20
    {"Strom lesen"      ,  "-IL"  ,  cmdOK  },
21
    {"Leistung lesen"    ,  "-LL"  ,  cmdOK  },
22
    {"Fehler lesen"      ,  "-FL"  ,  cmdOK  },
23
  };
24
25
  srchCmd( NULL , NULL ); // Die Funktion kennt er wohl nicht.. Obwohl sie in der .c und .h vorhanden ist.
26
27
    return 0;
28
}

von Wunderberg (Gast)


Lesenswert?

"C:\Users\Frank\Dropbox\C - Programmieren\C-Librarys\trunk\Kommando 
Interpreter\cmd.h"

1. Vermeide Leerzeichen
2. \ muss \\ sein

von Markus F. (mfro)


Lesenswert?

Absolute (auch noch DOS-) Pfade sind keine gute Idee in 
include-Statements.
Backslashes darin sind überhaupt keine gute Idee.

von Jim M. (turboj)


Lesenswert?

Mach mal ein Copy&Paste aus der Konsole mit den Fehlermeldungen beim 
Compilieren.

Den Pfad zur include Datei gibt man besser bei den Projekteinstellungen 
an.

Backslash hat in C eine spezielle Bedeutung und dürfte hier eher 
schlecht funktionieren.

von Frank H. (Gast)


Lesenswert?

Das ist der Output
1
11:49:15 **** Inkrementelles Erstellen von Konfiguration Debug für Projekt Kommando Interpreter ****
2
Info: Internal Builder is used for build
3
gcc -O0 -g3 -Wall -c -fmessage-length=0 -o main.o "..\\main.c" 
4
..\main.c: In Funktion »main«:
5
..\main.c:21:13: Warnung: Variable »cmd« wird nicht verwendet [-Wunused-variable]
6
gcc -o "Kommando Interpreter.exe" main.o 
7
main.o: In function `main':
8
C:\Users\Jan Homann\Desktop\Kommando Interpreter\Debug/../main.c:32: undefined reference to `srchCmd'
9
collect2: ld gab 1 als Ende-Status zurück
10
11
11:49:15 Build Failed. 1 errors, 1 warnings. (took 262ms)

von Frank H. (Gast)


Lesenswert?

Wo kann ich den Pfad zu den .h einstellen in dem neuen Eclipse?

von Lutz (Gast)


Lesenswert?

Wenn du das mit Anführungszeichen machst, brauchst du die headerdatei 
einfach nur in das Projekt kopieren (z.B. in den Ordner iclude, sofern 
angelegt). Wenn das immer noch nicht reichen sollten, im Projektexplorer 
mal rechte Maustaste auf dem Projet und "Refresh" drücken.

von Frank H. (Gast)


Lesenswert?

Das haut leider nicht hin. Auch wenn ich die Dateien direkt zu der 
main.c kopiere..

von Frank H. (Gast)


Lesenswert?

Ah, habe das mit dem "Aktualisieren" überlesen.
Kann ich denn die Dateien nicht aus dem anderen Pfad benutzen?

von Jim M. (turboj)


Lesenswert?

Frank H. schrieb:
> main.o: In function `main':
> C:\Users\Jan Homann\Desktop\Kommando Interpreter\Debug/../main.c:32:
> undefined reference to `srchCmd'
> collect2: ld gab 1 als Ende-Status zurück

Das ist ein Linker Fehler. Du hast vergessen ein .o oder eine Lib mit 
einzulinken.

Kann auch sein das ein oder mehrere .c File(s) im Projekt fehlen.

von Stefan F. (Gast)


Lesenswert?

Zu den meisten *.h Dateien gehört auch eine gleichnahmige *.c Datei 
(Quelltext) oder eine *.o Datei (bereits Compiliert). Diese musst du zu 
deiner Projektkonfiguration hinzufügen.

Die *.h Datei enthält nur die Namen der Funktionen, die von einer *.c 
oder *.o Datei bereitgestellt wird. Der Linker fügt alle Fragmente 
zusammen und meldet die oben gezeigte Fehlermeldung, wenn die Funktion 
fehlt. Das heißt, es fehlt eine *.c oder *.o Datei.

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.