C++, Debian, Gpio, wiringPi Fehler beim kompilieren

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Leute!
    Ich bin hier neu im Forum, aber da ich langsam verzweifel, wende ich mich hier mal an Euch:

    Ich versuche seit 2 Tagen mit meinem "Raspberry Pi ´v2´" ein simples C++ Programm zu schreiben, dass eine LED, die an einem gpio Pin angeschlossen ist zu schalten.

    "Leider klappt dat nicht"


    Mit Codeblocks meckert er direkt bei den für wiringPi üblichen funktionen rum und wenn ich das Ganze im "Terminal" kompiliere meldet er bei jeder Zeile: undefined reference to ...

    NATUERLICH habe ich das wiringPi installiert!!! Denn mehr Antworten als "du musst das installiert haben" habe ich im netz nicht gefunden. Ich kann damit auch durch Terminal Befehle die LED schalten, kein Problem! Nur der, die Compiler haben damit Probleme. Die Testprogramme habe ich unter anderem aus dem Netz, da das ja eh nur zum Testen dienen sollte und sind wohl korrekt. Kennt einer das Problem oder kann mir wer helfen? Ich dreh langsam durch deswegen

    ... ich bin alles andere als ein Linux Experte, also bitte für Dumme wie ich es bin erklären :D


    eines der Programme die ich zum laufen bekommen wollte:
    #include <wiringPi.h>
    int main (void)
    {
    wiringPiSetup () ;
    pinMode (0, OUTPUT) ;
    for (;;)
    {
    digitalWrite (0, HIGH) ; delay (500) ;
    digitalWrite (0, LOW) ; delay (500) ;
    }
    return 0 ;
    }

    Kompiliert mit:

    gcc -Wall -o blink blink.c -lwiringPi (Hier kommt er halt nicht weiter)
    sudo ./blink


    Wäre echt klasse, wenn mir einer das Problem lösen kann :D

  • C++, Debian, Gpio, wiringPi Fehler beim kompilieren? Schau mal ob du hier fündig wirst!

  • Hallo NoobyLenny,

    herzlich Willkommen in unserem Forum!

    Mir fallen da erstmal ein paar Dinge auf:
    1. Wenn Du Code postest, dann mache es bitte in Code-Tags [ c o d e ] und [ / c o d e ] (ohne Leerzeichen) oder indem Du das # oben in der Symbolleiste anklickst.
    2. den Pin 0 in pinMode(0, ...) und digitalWrite() gibt es bei Raspberry Pi Modell 2 nicht.
    3. mache mal ein Leerzeichen hinter -l
    4. Wenn bei Dir Fehlermeldungen kommen, dann poste sie bitte auch - sonst geht hier das große Rätselraten los. Den meisten hier ist die Glaskugel vom Tisch gerollt ...
    5. Dann hätte ich noch etwas wie den Befehl erwartet:

    Code
    wiringPiSetupGpio();

    Ansonsten schau mal hier nach, wenn Du etwas über das GPIO-Layout erfahren willst.

    Wenn Du dann einen Schritt weiter gekommen bist, dann schau mal hier nach, wenn das Programm gestartet werden kann, aber die LED nicht blinkt, weil Du bzgl. DeviceTrees nichts gemacht hast.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (3. Mai 2015 um 19:27)

  • Danke erstmal für die Hinweise...
    Pin 0 ist auch falsch ... in meinem Quelltext ist das "9" (klappt über das terminal auch an zu steuern)
    und wenn es beim rasppi v2 den befehl digitalWrite nicht gibt ... welchen Befehl benötige ich denn dann ... bzw funktioniert das wiring überhaupt mit der v2?

    zu dem hätte ich gedacht das dass in c++ eh egal wäre welchen rasp ich benutze (zumindest was den quelltext an sich an geht)

  • Hallo NoobyLenny,

    DigitalWrite() gibt es wohl, aber den Pin 0 gibt es nicht...

    Siehe auch Beitrag #2, Punkt 5.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (3. Mai 2015 um 19:28)

  • Moinsen NoobyLenny ...
    Was wird Dir ausgegeben, wenn Du folgende Kommandos eingibst:

    Code
    pi@raspberrypi ~ $ ls -l /usr/local/include/wiring*
    Spoiler anzeigen


    -rw-r--r-- 1 root staff 5462 Apr 19 2014 /usr/local/include/wiringPi.h
    -rw-r--r-- 1 root staff 1579 Apr 19 2014 /usr/local/include/wiringPiI2C.h
    -rw-r--r-- 1 root staff 1250 Apr 19 2014 /usr/local/include/wiringPiSPI.h
    -rw-r--r-- 1 root staff 1496 Apr 19 2014 /usr/local/include/wiringSerial.h
    -rw-r--r-- 1 root staff 1367 Apr 19 2014 /usr/local/include/wiringShift.h

    Code
    pi@raspberrypi ~ $ ls -l /usr/local/lib/*wir*
    Spoiler anzeigen


    lrwxrwxrwx 1 root staff 21 Apr 19 2014 /usr/local/lib/libwiringPiDev.so -> libwiringPiDev.so.2.0
    -rwxr-xr-x 1 root staff 23229 Apr 19 2014 /usr/local/lib/libwiringPiDev.so.2.0
    lrwxrwxrwx 1 root staff 18 Apr 19 2014 /usr/local/lib/libwiringPi.so -> libwiringPi.so.2.0
    -rwxr-xr-x 1 root staff 43144 Apr 19 2014 /usr/local/lib/libwiringPi.so.2.0

    Poste das mal, dann sehen wir weiter ...
    cu,
    -ds-

  • habe beide Zeilen ein gegeben. Ergebnis:

    -rw-r--r-- l root uucp 6405 Mai 3 17:47 /usr/local/include/wiringPi.h
    ... /wiringPiI2C.h
    ... /wiringPiSPI.h
    ... /wiringSerial.h
    ... /wiringShift.h


    Bei dem zweiten Kommando gibt er das selbe aus

    Jeehaaaawww DANKE Dreamshader


    habe die Bibliotheken die mir grade durch deine Kommandos angezeigt wurden hinzu gefügt ... lüppt nun :D

    Einmal editiert, zuletzt von NoobyLenny (3. Mai 2015 um 20:03)

  • Na toll;
    nach dem das gestern funktioniert hat, wollte ich das heute mit einem etwas verändertem Quellcode erneut versuchen; es lief wieder nicht ... auch der alte Quellcode von gestern lüppt nicht mehr wenn ich ihn kompilieren möchte ... er zeigt nun wieder den gleichen Fehler wie vorher an:

    undefined reference to ´wiringPiSetup´

    Was habe ich denn gestern noch gemacht was mir heute wieder fehlt :(

    (die neuen Bibliotheken die ich vorher vergessen habe sind natürlich drinne)

  • Hallo NoobyLenny,

    genau an dieser Stelle empfiehlt sich die Installation einer IDE (integrierten Entwicklungsumgebung). Dort wird der Krempel einmal eingerichtet und läuft immer wieder.

    Mein Favorit ist hier Geany. Lässt sich ganz einfach installieren mit:

    Code
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install geany
    sudo apt-get update
    sudo apt-get upgrade


    Die ersten beiden Kommandos aktualisieren Dein System. Das dritte Kommando installiert Geany. Die beiden letzten Kommanos aktualisieren das System - insbesondere Geany - sollten sich durch diese Installation irgendwelche Updates ergeben haben.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Ich habe das ganze mit Code::Blocks versucht (und irgend wie bin ich kein Fan von C::B) damit hat es bisher auch nicht funktioniert. Es kommt der gleiche Fehler raus. Aber es kann ja nicht sein das er gestern die Bibliotheken akzeptiert und heute nicht mehr.

  • Hi,
    hm ... irgendwas scheinst Du jedenfalls verändert zu haben. Möglicherweise bist Du im Verzeichnis /usr/local/lib gestanden.
    Poste doch noch mal die Ausgaben wie -> hier <- beschrieben. Und bitte posten, nicht so was wie "selbe Ausgabe" (das kann nämlich gar nicht sein).

    Probier's vielleicht mal -> hiermit <- ...
    cu,
    -ds-

  • Sooo erstmal Danke für die schnelle Hilfe ... geht ja wohl fix hier :D
    An meiner Art hier etwas zu Posten werde ich noch schrauben (also ruhig weiter schreiben was nicht passt, möchte ja auch weiter hin noch hilfe bekommen :D )

    habe das Problem mit etwas tüfteln heraus gefunden: Ich muss anscheinend jedes mal vorher (also wenn ich den Pi neu starte) das wiringPi neu "aktivieren" (im wiringPi Ordner mit ./build )

    Wenn jemand weiss wie ich das "fixen" kann wäre supi ... ansonsten komme ich natürlich auch so klar. Habe es allerdings noch nicht über Codeblocks (Geany werde ich auch noch mal an testen) versucht ... mache ich wenn ich heute abend aus der Uni komme (vll schrei ich dann noch mal um Hilfe :-D)

  • Mit dem statischen installieren hat nun auch geklappt, nun noch der letzte Punkt :D
    was muss ich tun damit Code::Blocks oder Geany die Bibliotheken akzeptieren. Bei beiden Compilern nimmt er die nicht an (auch nicht mit root rechten gestartet; hatte in nem anderen Forum gelesen, das dass muss)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!