Probleme beim Compilieren von C-Programm

Gast #3230411
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
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
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
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.
#3230443
ein ";" zwischen Parametern im Funktionsaufruf ist ungewöhnlich. Ich 
hätte dort ein "," erwartet. Und die Definition von "amp" sehe ich auch 
nicht. Man könnte meinen, der Compiler hat recht mit seinen Meckereien.

Html und Text gemischt?
Gast #3230450
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 #3230453
Nachdem ich das &amp (amp) entfernt habe, bekomme ich nur noch folgende 
Fehler:

display.c: In function âmainâ:
display.c:26:18: error: expected expression before â;â token
Gast #3230466
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 #3230477
Ich habe leider eine Zeile der Fehlermeldung übersehen:


collect2: ld returned 1 exit status


die hing noch ganz unten dran.

Leider komme ich ohne eure Hilfe absolut nicht mehr weiter..
Gast #3230502
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
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
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
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
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..
#3233591
Chekker schrieb:
> Und der Code sollte soweit ich das beurteilen kann ja auch
> funktionieren..

Kannst Du ihn denn beurteilen?
Ich hab den Eindruck, Dein "soweit" bedeutet eigentlich "sokurz".
Du machst zuviele Baustellen gleichzeitig auf.

Vielleicht solltest Du doch erst mit ner Blink-LED anfangen.
Gast #3237308
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.
#3237338
Chekker schrieb:
> Hab ich schon. Mein einziges Problem ist, dass keine Uhrzeit+Datum auf
> dem Display erscheint, obwohl Aufbau und Software exakt wie vorgegeben
> ist.

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.
Gast #3237339
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

Eine eigene Frage? Dieser Thread ist über 13 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.