Forum: Compiler & IDEs Atmel Studio #include Problem


von Hawk (Gast)


Lesenswert?

huhu

Habe in mein Projekt eine hd44780.c und eine hd44780.h Datei geschoben.

Um sie im Main anzubinden habe ich #include "hd44780.h" benutzt. Was zu 
Fehlermeldungen geführt hat, nehme ich jetzt  #include "hd44780.c" hinzu 
funktioniert alles.

Normal muß ich doch nur #include "hd44780.h" einfügen oder?

Gruß

Hawk

: Verschoben durch User
von jungspund (Gast)


Lesenswert?

Es wäre vorteilhaft, die Fehlermeldungen hier zu nennen.

von Hawk (Gast)


Lesenswert?

bitte schön


Fehler    undefined reference to 'lcd_init()'

von jungspund (Gast)


Lesenswert?

Lad einmal den Code hoch.
Hast du die includes mit "" oder <> umklammert?
Bei "" wird im eigenen Verzeichnks gesucht und bei <> in einem 
Stammverzeichnis für libs.
Sind die Funktionen im .h file mit "extern" gelabelt?

von Peter II (Gast)


Lesenswert?

Hawk schrieb:
> Fehler    undefined reference to 'lcd_init()'

du hast vergessen die .c Datei dem Projekt hinzufügen. Damit sieht sie 
der linker nicht.

jungspund schrieb:
> Lad einmal den Code hoch.
> Hast du die includes mit "" oder <> umklammert?

das ist eine Meldung vom Linker, das hat nicht mit dem include zu tun.

von Hawk (Gast)


Lesenswert?

Die *.c ist im selben Ordner wie die *.h.

Muß ich dem Linker irgendwie mitteilen das die dar ist?

Habe beide Dateien per drag and drop in den die Projektmappe gezogen.

von Peter II (Gast)


Lesenswert?

Hawk schrieb:
> Habe beide Dateien per drag and drop in den die Projektmappe gezogen.

auch in die richtige Kategorie? Zeig mal ein screenshot vom Projekt.

von Hawk (Gast)


Angehängte Dateien:

Lesenswert?

bitte schön

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Funktioniert das C-Modul im C++-Kontext? D.h. sind globale Deklarationen 
brav mit extern "C" versorgt?

von Peter II (Gast)


Lesenswert?

Hawk schrieb:
> bitte schön

ich kenne das aktuelle Studio nicht, aber das C und H in einer Liste 
stehen finde ich merkwürdig.

bei mir gibt es Sourcefile und Headerfiles dort sie sie dann 
einsortiert.

Auch der Misch zwischen C++ und C könnte Probleme machen.

von ib (Gast)


Lesenswert?

muss mann nicht so? #include <hd44780>

von ib (Gast)


Lesenswert?

ib schrieb:
> muss mann nicht so? #include <hd44780>

so #include <hd44780.h>

von Peter II (Gast)


Lesenswert?

ib schrieb:
> so #include <hd44780.h>

nein, weil es keine externe lib ist sondern eine eigenen Header Datei. 
Aber das hat nichts mit der Fehlermeldung vom linker zu tun.

von Pete K. (pete77)


Lesenswert?

Was steht denn in der hd44780.h drin und was in hd44780.c?
Ist da lcd_init() überhaupt definiert/deklariert?

Und schau Dir mal das Makefile an.

Und noch etwas: F_CPU gehört ins Makefile, nie in eine .c oder .h Datei.

: Bearbeitet durch User
von Hawk (Gast)


Lesenswert?

Johann L. schrieb:
> Funktioniert das C-Modul im C++-Kontext? D.h. sind globale
> Deklarationen
> brav mit extern "C" versorgt?

Sobald ich #include "hd44780.c" mit hinzunehme funktioniert das Display 
einwandfrei.
Globale Variablen oder Konstanten sind mir jetzt nicht aufgefallen.

Peter II schrieb:
> Hawk schrieb:
>> bitte schön
>
> ich kenne das aktuelle Studio nicht, aber das C und H in einer Liste
> stehen finde ich merkwürdig.
>
> bei mir gibt es Sourcefile und Headerfiles dort sie sie dann
> einsortiert.
>
> Auch der Misch zwischen C++ und C könnte Probleme machen.

Wenn ich neue Sourcefile und Headerfiles erstelle, stehen die aus so wie 
jetzt in der Liste. Das mischen macht keine Probleme in der Richtung.

von René H. (Gast)


Lesenswert?

Häng mal das Linker Kommando an, welches ausgeführt wird.

Grüsse,
René

von Peter II (Gast)


Lesenswert?

Hawk schrieb:
> Wenn ich neue Sourcefile und Headerfiles erstelle, stehen die aus so wie
> jetzt in der Liste. Das mischen macht keine Probleme in der Richtung.

aber irgendwie muss das Studio wissen, welche Dateien er Compilieren und 
dem linker übergeben muss. Und bei dir übergibt er die hd44780.c nicht 
dem linker. (genauer die hd44780.o)

von Hawk (Gast)


Angehängte Dateien:

Lesenswert?

die Linker Einstellungen gibt es beim Studio einen Seite unter 
Eigenschaften des Projekts. hab euch die mal angehängt. Da habe ich halt 
noch nie was ändern müssen.

von Hawk (Gast)


Lesenswert?

Ich habs es mus heisen
1
extern "C" {
2
  #include "hd44780.h"
3
}

Danke euch  :D

von holger (Gast)


Lesenswert?

>Ich habs es mus heisen
>
>extern "C" {

main.cpp in main.c umbennen hätte es wohl auch getan.
Da ist ja kein bisschen C++ drin.

von Hawk (Gast)


Lesenswert?

holger schrieb:
>>Ich habs es mus heisen
>>
>>extern "C" {
>
> main.cpp in main.c umbennen hätte es wohl auch getan.
> Da ist ja kein bisschen C++ drin.

In dem Fall wohl ja ist aber auch noch lange nicht fertig, wollte erst 
mal das Display zum laufen bekommen.

von Curby23523 N. (Gast)


Lesenswert?

Peter II schrieb:
> ich kenne das aktuelle Studio nicht, aber das C und H in einer Liste
> stehen finde ich merkwürdig.

Das stört ich auch grade. Kriege ich das irgendwo umgeschaltet..? Ich 
sehe es nicht.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Hawk schrieb:
> Johann L. schrieb:
>> Funktioniert das C-Modul im C++-Kontext? D.h. sind globale
>> Deklarationen brav mit extern "C" versorgt?
>
> Sobald ich #include "hd44780.c" mit hinzunehme funktioniert das Display
> einwandfrei.

U.U. haben entsprechenden Identifier dann aber eine andere Linkage.

Außerdem wird der Code dann als C++-Code übersetzt, da er in einem 
C++-Modul includet ist.

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.