Compiler findet wiring-Header nicht

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hey,
    ich wollte jetzt mein erstes LED-Lampen Programm kompilieren, habe aber ein kleines Problem mit meinem Compiler.
    Ich benutze Clion und programmiere in C/++.

    Und zwar habe ich über CMakelist ein neues include-Directory hinzugefügt:
    include_directories("/home/username/wiringPi")

    Ohne Probleme konnte ich jetzt über Clion die wiring.h einbinden:
    #include <wiringpi/wiringPi.h>

    Es wird mir kein Fehler angezeigt und es werden mir auch alle Methoden der wiringPI.h angezeigt usw.
    Wenn ich das ganze nun aber kompilieren will, erhalte ich den Fehler:
    [100%] Building CXX object CMakeFiles/http://ledSimple.dir/main.cpp.o
    /home/username/ClionProjects/ledSimple/main.cpp:2:31: fatal error: wiringpi/wiringPi.h: No such file or directory
    #include <wiringpi/wiringPi.h>
    ^
    compilation terminated.
    make[3]: *** [CMakeFiles/http://ledSimple.dir/main.cpp.o] Error 1
    make[2]: *** [CMakeFiles/http://ledSimple.dir/all] Error 2
    make[1]: *** [CMakeFiles/http://ledSimple.dir/rule] Error 2
    make: *** [ledSimple] Error 2


    Was muss ich noch abändern, damit das kompilieren ohne Probbleme durchgeführt werden kann?

  • Hallo Madman,

    herzlich Willkommen in unserem Forum!



    include_directories("/home/username/wiringPi")

    Hast Du wirklich ein Verzeichnis [font="Courier New"]/home/username/...[/font] eingerichtet? Oder steht [font="Courier New"]username[/font] nur für Deinen LogIn-Namen, den Du hier nur nicht nennen möchtest?


    #include <wiringpi/wiringPi.h>

    ... funktioniert nur, wenn Du im Home-Verzeichnis arbeitest. Muss da kein absoluter Pfad angegeben werden? Die Fehlermeldung

    Code
    /home/username/ClionProjects/ledSimple/main.cpp:2:31: fatal error: wiringpi/wiringPi.h: No such file or directory


    deute ich jedenfalls so, dass der Compiler versucht, [font="Courier New"]wiring/wiringPi.h[/font] einzubinden. Der Pfad lautet aber [font="Courier New"]/home/username/wiringpi/wiringPi.h[/font].

    Ich vermute, dass Du Dich im Verzeichnis [font="Courier New"]/home/username/ClionProjects/ledSimple/[/font] befindest. Der Compiler sucht dort nach [font="Courier New"]wiringPi[/font] - also im Verzeichnis [font="Courier New"]/home/username/ClioProjects/ledSimple/[/font]. Dort hast Du aber [font="Courier New"]wiringPi[/font] nicht gespeichert...

    Ob diese Theorie zutrifft, verrät Dir die Ausgabe von

    Code
    pwd


    die Du bitte hier posten mögest.


    Bei anderen Programmierumgebungen kenne ich es so, dass der Pfad für Include-Dateien und Libraries in Umgebungsvariablen bekannt gemacht wird. Was hast Du in dieser Hinsicht unternommen?

    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 (12. Oktober 2015 um 15:45)

  • Hey, danke für deine Antwort.
    Ja, mit "username" war mein Benutzername gemeint. Hab ich manuell abgeändert.
    Ich hab das ganze jetzt nochmal umstrukturiert und einfach das komplette wiringPI in /usr/includes installiert.

    Wenn ich über meinen Compiler nun
    #include <wiringPi/wiringPi/wiringPi.h>

    einbinde, kommt nicht mehr der fehler, dass wiringPi nicht gefunden wurde.
    Aber nun sieht die Ausgabe wie folgt aus:


    Scanning dependencies of target ledSimple
    [100%] Building CXX object CMakeFiles/http://ledSimple.dir/main.cpp.o
    Linking CXX executable ledSimple
    CMakeFiles/http://ledSimple.dir/main.cpp.o: In function `main':
    /home/username/ClionProjects/ledSimple/main.cpp:9: undefined reference to `wiringPiSetup'
    /home/username/ClionProjects/ledSimple/main.cpp:10: undefined reference to `pinMode'
    /home/username/ClionProjects/ledSimple/main.cpp:11: undefined reference to `digitalWrite'
    /home/username/ClionProjects/ledSimple/main.cpp:12: undefined reference to `delay'
    /home/username/ClionProjects/ledSimple/main.cpp:13: undefined reference to `digitalWrite'
    collect2: error: ld returned 1 exit status
    make[3]: *** [ledSimple] Error 1
    make[2]: *** [CMakeFiles/http://ledSimple.dir/all] Error 2
    make[1]: *** [CMakeFiles/http://ledSimple.dir/rule] Error 2
    make: *** [ledSimple] Error 2


    Also wiringPi.h wird anscheinend nun gefunden, dennoch können die Funktionen nicht gefunden werden..

  • Hast du alles von wiringPi in includes gepackt?
    nun finder er die header, aber die shared object files nicht, der Linker fliegt auf die Nase, weil NICHT ALLES IN includes/ gehört, sondern auch ein Teil in share.
    wiringPi lässt sich eigentlich gut installieren. Versuche es bitte laut deren Anleitung nochmal ganz normal.

  • Hey,
    danke für die Antwort.
    Das Problem war weniger wiringPi, vielmehr CMake und die Art wie man dort Libarys hinzufügt etc.

    Hab es jetzt nach langem rumprobieren geschafft:
    SET(CMAKE_CXX_FLAGS "-pthread ${CMAKE_CXX_FLAGS}")
    link_libraries(wiringPi)

    musste in die CMakeLists.txt

    Jetzt wird alles wunderbar kompiliert. Muss jetzt nur noch den -m32 Parameter irgendwie übergeben bekommen, damit ich ein 32-Bit-Programm erhalte, dann sollte alles hoffentlich funktionieren.

    Werd mich da heute abend mal dran setzen.
    Danke erstmal

    edit:// übrigends alles umsonst gemacht.
    Lässt sich ohne "cross compile" natürlich nicht ausführen. dafür brauch man dann ja kein CMake mehr, sondern benutzt ja nen toolchain.. naja..

    Einmal editiert, zuletzt von madman (13. Oktober 2015 um 23:12)

Jetzt mitmachen!

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