Probleme beim Compilieren von C-Programm

Gast #3230411
Lesenswert?

Hallo,

ich habe ein Problem. Und zwar möchte ich den Code dieser Seite nutzen:
http://www.daniel-papenfuss.de/2013/02/projektvorstellung-raspberry-pi-wecker-wip-schritt-1-2/

(Bau eines Weckers mit RaspberryPi). Ich habe den Aufbau 1:1 übernommen, 
alles richtig Angeschlossen. Dann unter Raspbian mit "nano" auf dem 
Desktop eine display.c-Datei erstellt, und den oben verlinkten Code 
reinkopiert. Nun möchte ich diese Datei noch Kompilieren:

- gcc -v -o display display.c

aber hier kommen auch schon die ersten Fehler:

root@Dieter-RaspberryPi ~/Desktop $ gcc -o display display.c
display.c: In function âmainâ:
display.c:25:18: error: âampâ undeclared (first use in this function)
display.c:25:18: note: each undeclared identifier is reported only once 
for each function it appears in
display.c:25:21: error: expected â)â before â;â token

Woran kann das liegen und was habe ich Falsch gemacht ? Ist eines meiner 
ersten C-Projekte.

MFG
Gast #3230419
Lesenswert?

Chekker schrieb:
> Woran kann das liegen und was habe ich Falsch gemacht ? Ist eines meiner
> ersten C-Projekte.

du hast scheinbar UTF8 aus dem Netz kopiert. Das geht bei C aber nicht. 
Kopiere den Inhalt vorher in einen einfache Textdatei (Notepad) und dann 
erst zu dem Linux.
Gast #3230432
Lesenswert?

Abend,

auch das vorherige Kopieren in eine Textdatei hat leider nichts 
gebracht. (Hätte ich mir auch denken können, da ich den Code per Hand 
abgeschrieben hatte!) Es kommt immer noch die Selbe Fehlermeldung..
#3230442
Lesenswert?

Entweder das was Peter gesagt hat, oder deine Fehlermeldung verwendet 
anstatt von Hochkomma das Zeichen â.

Egal was es ist, vergiss diesen Code. Wenn du gerade C lernst, verwende 
ihn nicht um davon irgendwas zu lernen.

Begründung:

- Der Code hat Strichpunkte hinter die #include Anweißung. Die gehören 
da nicht hin.

- Die maximale Länge der 'Uhrzeit' und 'Datum' arrays wird der Funktion 
strftime() mit 100 übergeben. In wirklichkeit sind beide arrays nur 80 
byte groß. Buffer overflow gefahr(zumindest prinzipiell, in diesem fall 
wird der String vermutlich nie länger als 80 Zeichen).

- sleep(0.25); sleep bekommt als parameter einen unsigned int, also eine 
ganz Zahl. Hier würde also 0.25 zu der Ganzzahl 0 gekürzt werden.

- Das '&' über das der Compiler hier stolpert soll nur ein '&' sein.

Das fällt mir so beim schnellern drüberschaun auf, vermutlich hat der 
Code noch mehr Probleme.
Gast #3230450
Lesenswert?

Und wie behebe ich die Fehler?

Die "Strichpunkte" habe ich schon von alleine Entfernt, denn wenn die 
hinter der Include stehen, bekomme ich noch Fehler, die für jede 
include-"zeile" zutreffen.

Die größe der Datei beträgt "880 Bytes".

Es geht in diesem Projekt nicht vorrangig darum C zu lernen (fänd ich 
aber später ganz Interessant, vielleich im Winter ;-)) sonder meinem 
RaspberryPi eine nützliche funktion zuzuweisen, indem er meinen Defekten 
Wecker ablöst. Schade ist halt nur das das Programm nicht funktioniert, 
da der Hardwareaufbau schon Fertig ist..
Gast #3230466
Lesenswert?

Habe den Fehler gefunden,

es war ein überflüssiges "Semilikon" (";").

Nun kompiliert er ein paar Sekunden (Denke ich) und dann kommt folgende 
Ausgabe:

pi@Dieter-RaspberryPi ~/Desktop $ gcc -o display display.c
/tmp/ccKjoV0x.o: In function `main':
display.c:(.text+0xc): undefined reference to `wiringPiSetup'
display.c:(.text+0x94): undefined reference to `lcdInit'
display.c:(.text+0xf8): undefined reference to `lcdPosition'
display.c:(.text+0x108): undefined reference to `lcdPuts'
display.c:(.text+0x118): undefined reference to `lcdPosition'
display.c:(.text+0x128): undefined reference to `lcdPuts'
display.c:(.text+0x134): undefined reference to `pinMode'


Was genau soll mir das denn jetzt Sagen?

MFG
Gast #3230502
Lesenswert?

Moin Marcel,

WiringPi ist installiert, damit steuerte ich immer die Ports. Wenn ich 
die Lib mit übergebe, (-> gcc -o display display.c -lwiringPi) dann 
entfallen wenigstens schoneinmal ein paar der Fehlermeldungen.

Nun kommen nur noch folgende:

pi@Dieter-RaspberryPi ~/Desktop $ gcc -o display display.c -lwiringPi
/tmp/ccqY4bmq.o: In function `main':
display.c:(.text+0x94): undefined reference to `lcdInit'
display.c:(.text+0xf8): undefined reference to `lcdPosition'
display.c:(.text+0x108): undefined reference to `lcdPuts'
display.c:(.text+0x118): undefined reference to `lcdPosition'
display.c:(.text+0x128): undefined reference to `lcdPuts'
collect2: ld returned 1 exit status


Bekommen wir die mit eurer Hilfe auch noch weg?

MFG
Moderator #3230536
Lesenswert?

Die LCD-Funktionen sollten eigentlich in der wiringPi-Bibliothek 
enthalten sein. Du kannst im Verzeichnis /usr/lib oder /lib (oder wo 
immer die Bibliothek) installiert ist, mit
1
nm libwiringPi.a

oder
1
nm -D libwiringPi.so

eine Liste der Symbole ausgeben, die in der Bibliothek definiert sind. 
Da sollten u.a. wiringPiSetup und lcdInit aufgelistet werden. Ist 
wiringPiSetup vorhanden, nicht aber lcdInit, dann ist aus 
irgendeinem Grund die Bibliothek unvollständig.
Gast #3230588
Lesenswert?

Mir ist gerade beim versuch die Bibliothek sicherheitshalber neu 
zuinstallieren folgendes am ende nachdem Build von WiringPi aufgefallen:

NOTE: This is wiringPi v2, and if you need to use the lcd, Piface,
  Gertboard, MaxDetext, etc. routines then you must change your
  compile scripts to add -lwiringPiDev

Hat denn das was damit zutun, denn schließlich möchte ich ja ein lcd 
nutzen..
Gast #3230972
Lesenswert?

Hallo,

ich habe das Programm jetzt kompiliert, Fehlerfrei dank eurer Hilfe.

Wenn ich es jetzt ausführen möchte mit:

./display

dann passiert nichts mehr, also die Konsole sprint in die nächste Zeile, 
aber der Name und Pfad (pi@raspberry usw) kommt nicht mehr, d.H. die 
Zeile blibt leer und auf Befehle wird nicht mehr Reagiert. Auf dem 
Display wird auch noch nichts angezeigt.

Was ist denn jetzt schon wieder Falsch?
Gast #3232888
Lesenswert?

Hallo,

Das mit der Endlosschleife habe ich soweit verstanden, stand wohl 
irgendwie gerade auf dem Schlauch..

Nun ist es ja aber so das auf dem Display einfach nichts angezeigt wird, 
obwohl richtig verdrahtet, Kontrast richtig eingestellt und Display 
(eigentlich) Funktionsfähig.

Und der Code sollte soweit ich das beurteilen kann ja auch 
funktionieren..
Gast #3237308
Lesenswert?

Hab ich schon. Mein einziges Problem ist, dass keine Uhrzeit+Datum auf 
dem Display erscheint, obwohl Aufbau und Software exakt wie vorgegeben 
ist.

Aber so läuft dass immer. Bei 20.000.000 Leuten geht's, und bei mir 
wieder nicht.
Gast #3237339
Lesenswert?

Karl Heinz Buchegger schrieb:
> Tja. Aber irgendwas ist eben anders. Sonst würde es funktionieren.
>
> Genau deswegen sind mir die kleinen AVR lieber. Da gibt es kein
> Betriebssystem mit dem ich mich erst mal herumschlagen muss.

ich glaube nicht das es am BS oder der Raspi liegt. Wenn das Programm 
compiliert und auch startet dann wird es auch das machen was es soll.

Prüfe mal lieber die Anschlüsse zum LCD.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren