Raspberry Pi in Codeblocks wiringPi.h

Direkte Linux-Programmierung, POSIX
win8789
Beiträge: 25
Registriert: So Mai 29, 2016 12:27 pm

Raspberry Pi in Codeblocks wiringPi.h

Beitrag von win8789 » Sa Dez 31, 2016 4:42 pm

Hallo,
ich habe einen Raspberry Pi und möchte mit ihn über GPIO eine Relai steuern.
Dafür verwende ich wiringPi.h
Wenn ich nun ein ein code im Texteditor schreibe und mit

Code: Alles auswählen

g++ cppdatei.cpp -o zeildatei -lwiringPi
compiliere funktionert alles.

Nun kann es sehr unbequem sein alles im Testeditor zu schreiben, deshalb möchte ich gerne Codeblocks verwenden.
Allerdings erhallte ich dort (beim selben Quellcode) mehere Fehlermeldungen mit undefinded reference to ...
Was muss ich machen, damit er die Header wiringPi.h akzeptiert? Für hilfe wäre ich dankbar ^^

ps. normaler c++ code (also ohne wiringPi.h) funktionert.

PPS: Ich habe es auch nicht hinbekommen boost zu installieren :cry: (aber das ist wohl ein anderes Thema)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8506
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Raspberry Pi in Codeblocks wiringPi.h

Beitrag von Xin » So Jan 01, 2017 1:35 pm

Undefined reference bedeutet, dass dem Linker Funktionen fehlen, die in irgendeiner Library stehen.
Vermutlich fehlt Dir die wiringPi-Lib, die Du mit -lwiringPi hinzufügst.

Du hast offenbar bereits die Include-Verzeichnisse richtig gesetzt, aber Du musst auch die Library bekannt geben.
Hier ist das für Gtk erklärt, das musst Du entsprechend auf die von Dir benutzte Lib anpassen: Codeblocks einrichten
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

win8789
Beiträge: 25
Registriert: So Mai 29, 2016 12:27 pm

Re: Raspberry Pi in Codeblocks wiringPi.h

Beitrag von win8789 » So Jan 01, 2017 4:12 pm

ich habe jetzt bei "compiler settings->other options" "-lwiringPi" angegeben und beim "search directories->Linker" die Pfad "pi/wiringPi/devLib" angegeben.
Ich vermute mal, dass der Pfad für die Lib falsch ist, allerdings Habe ich kein Plan wo ich unter Linux den Lib-Ordner für wiringPi finde.

Habe auch schon im Terminal "pkg-config --libs wiringPi" eingegeben, allerdings auch ohne erfolg.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8506
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Raspberry Pi in Codeblocks wiringPi.h

Beitrag von Xin » So Jan 01, 2017 8:50 pm

win8789 hat geschrieben:ich habe jetzt bei "compiler settings->other options" "-lwiringPi" angegeben und beim "search directories->Linker" die Pfad "pi/wiringPi/devLib" angegeben.
Okay, aber wo ist das Verzeichnis pi? ^^
In $(HOME)?
Ich weiß es nicht - Codelite vermutlich auch nicht.

Das mit den Other options müsste funktionieren, grundsätzlich würde man die Libs bei "Linker Settings" eintragen - ich sehe gerade, da fehlt ein Bild... ^^
Gleich mal gucken, ob ich das Bild noch auf der Festplatte habe. :-/

Ist aber auch nicht wichtig, Codelite würde das -l halt für Dich schreiben, ansonsten sollte da kein Unterschied sein.
Was mich nur wundert ist, dass Du beim kompilieren auf der Konsole keinen Lib-Pfad angeben muss. Die Lib müsste also im Standard-Pfad liegen, aber "pi/wiringPi/devLib" klingt jetzt nicht danach ^^
win8789 hat geschrieben:Ich vermute mal, dass der Pfad für die Lib falsch ist, allerdings Habe ich kein Plan wo ich unter Linux den Lib-Ordner für wiringPi finde.
Das hängt davon ab, wie Du das auf die Festplatte bekommen hast. Hast Du es vom Paketmanager installiert wird es vermutlich irgendwo in /usr/lib oder /usr/share/lib liegen. Wenn Du es selbst kompiliert oder aus einem Archiv ausgepackt hast, liegt es halt da, wo Du es hingepackt hast ;)
win8789 hat geschrieben:Habe auch schon im Terminal "pkg-config --libs wiringPi" eingegeben, allerdings auch ohne erfolg.
pkg-config funktioniert nur, wenn das Paket eine entsprechende Beschreibung für pkg-config liefert.

Bei allen anderen Libs musst Du selbst wissen, wo die liegen :)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

win8789
Beiträge: 25
Registriert: So Mai 29, 2016 12:27 pm

Re: Raspberry Pi in Codeblocks wiringPi.h

Beitrag von win8789 » So Jan 01, 2017 10:04 pm

Danke für die Antwort.
Habe die INSTALL.txt des Entwicklers gefunden. Dort steht, dass sie in /usr/local/lib sind.
In diesem Ordner sind auch mehere Datein, welche "libwiringPi.so","libwiringPi.so.2.36","libwiringPiDev.so", "libwiringPiDev.so.2.36"
Wenn ich den Ordner nehme funktioniert es aber auch nicht. Im Ordner sind auch noch ander Ordner die nichts mit wiringPi zu tun haben.

Ich habe es so installiert:

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install git-core
pi@raspberrypi ~ $ git clone git://git.drogon.net/wiringPi
pi@raspberrypi ~ $ cd WiringPi
pi@raspberrypi ~/WiringPi $ ./build

PS: "/usr/share/lib" habe ich gar nicht. In /usr/lib sind ganz unten die selben Datein wie in /usr/local/lib.

win8789
Beiträge: 25
Registriert: So Mai 29, 2016 12:27 pm

Re: Raspberry Pi in Codeblocks wiringPi.h

Beitrag von win8789 » Mi Jan 04, 2017 10:16 pm

Ich habe ein ähnliches Problem, wenn ich versuche Boost zu installieren.
Wenn Ich den Include und den lib Order angebe und bei "link liberarys" "libboost_filesystem-mgw53-mt-d-1_48.a" und libboost_system-mgw53-mt-d-1_48.a" angebe (also alles Debug) und dann ein Programm wie

Code: Alles auswählen

 #include <iostream>
#include <string>

#include <boost/filesystem.hpp>

using namespace std;

int main ()
{
    cout << "HEllo World" << endl;


    cout << "Testing if \"C:\\Hello.txt\" exists" << endl;

    boost::filesystem::path l_path("c:\\Hello.txt");
    if ( boost::filesystem::exists(l_path) )
    {

        cout << "File does exist!" << endl;
    }
    else
    {

        cout << "File missing" << endl;
    }

}
compiliere funktioniert es.
Wenn ich allerding asio.hpp einfügen will funktioniert es nicht mehr.
Ich denke ich muss bei "link liberarys" noch mehr angeben. Wenn ich aber alle "-d-1_48.a" Dateien angebe funktionert es nicht.
Das nervt, dass ich es nicht schaffe.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8506
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Raspberry Pi in Codeblocks wiringPi.h

Beitrag von Xin » Do Jan 05, 2017 9:26 am

win8789 hat geschrieben:Ich habe ein ähnliches Problem, wenn ich versuche Boost zu installieren.
Wenn Ich den Include und den lib Order angebe und bei "link liberarys" "libboost_filesystem-mgw53-mt-d-1_48.a" und libboost_system-mgw53-mt-d-1_48.a" angebe (also alles Debug) und dann ein Programm wie
...
compiliere funktioniert es.
Wenn ich allerding asio.hpp einfügen will funktioniert es nicht mehr.
Das ist eine sehr überschaubare Fehlerbeschreibung.

Siehe hier: Frage formulieren
win8789 hat geschrieben:Das nervt, dass ich es nicht schaffe.
Ich kann hier Dein Problem nicht nachvollziehen, ich kann aber heute abend mal gucken.
Bis dahin wäre es gut, besser zu verstehen, was "funktioniert nicht" bedeutet. :)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3091
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Raspberry Pi in Codeblocks wiringPi.h

Beitrag von cloidnerux » Do Jan 05, 2017 10:08 am

Ich habe es so installiert:

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install git-core
pi@raspberrypi ~ $ git clone git://git.drogon.net/wiringPi
pi@raspberrypi ~ $ cd WiringPi
pi@raspberrypi ~/WiringPi $ ./build
Ich habe wiringPi auf meinem RPi mit Raspian auch genutzt, da hat es relativ problemlos funktioniert. Hast du das ./build mit Admin rechten ausgeführt?

In der Regel hast du diese Probleme mit den Abhängigkeiten, wenn die libs nicht korrekt installiert sind.
Wenn du per apt-get installierst, achte darauf, dass es die -dev Pakete sind.
Ich denke ich muss bei "link liberarys" noch mehr angeben. Wenn ich aber alle "-d-1_48.a" Dateien angebe funktionert es nicht.
Wenn du in Code::Blocks librarays angibst, gibst du nur den lib Namen an.
Statt "-lwiringPi" nur "wiringPi", weil C::B das "-l" automatisch hinzu fügt. Sehr hilfreich ist es auch, wenn du dir in der Ausgabekonsole den exakten Aufruf von gcc anschaust, den C::B generiert hat. Da wird dann meist sehr schnell klar, warum es nicht Funktioniert.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8506
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Raspberry Pi in Codeblocks wiringPi.h

Beitrag von Xin » Do Jan 05, 2017 10:20 am

cloidnerux hat geschrieben: Wenn du in Code::Blocks librarays angibst, gibst du nur den lib Namen an.
Statt "-lwiringPi" nur "wiringPi", weil C::B das "-l" automatisch hinzu fügt. Sehr hilfreich ist es auch, wenn du dir in der Ausgabekonsole den exakten Aufruf von gcc anschaust, den C::B generiert hat. Da wird dann meist sehr schnell klar, warum es nicht Funktioniert.
Da er es bei "Other Options" angegeben haben will, ignoriert er die Idee der Ordnung durch die GUI, aber inhaltlich sollte der Aufruf des Compilers identisch sein.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

win8789
Beiträge: 25
Registriert: So Mai 29, 2016 12:27 pm

Re: Raspberry Pi in Codeblocks wiringPi.h

Beitrag von win8789 » Do Jan 05, 2017 5:53 pm

cloidnerux hat geschrieben: Statt "-lwiringPi" nur "wiringPi", weil C::B das "-l" automatisch hinzu fügt. Sehr hilfreich ist es auch, wenn du dir in der Ausgabekonsole den exakten Aufruf von gcc anschaust, den C::B generiert hat. Da wird dann meist sehr schnell klar, warum es nicht Funktioniert.
Danke "wiringPi" funktionier jetzt Problemlos.
Xin hat geschrieben: Das ist eine sehr überschaubare Fehlerbeschreibung.
werde ich versuche das nächste mal mehr zu beachteten und natürlich auch dir danke für deine Hilfe.

Danke

Antworten