Seite 1 von 2

Raspberry Pi in Codeblocks wiringPi.h

Verfasst: Sa Dez 31, 2016 4:42 pm
von win8789
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)

Re: Raspberry Pi in Codeblocks wiringPi.h

Verfasst: So Jan 01, 2017 1:35 pm
von Xin
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

Re: Raspberry Pi in Codeblocks wiringPi.h

Verfasst: So Jan 01, 2017 4:12 pm
von win8789
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.

Re: Raspberry Pi in Codeblocks wiringPi.h

Verfasst: So Jan 01, 2017 8:50 pm
von Xin
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 :)

Re: Raspberry Pi in Codeblocks wiringPi.h

Verfasst: So Jan 01, 2017 10:04 pm
von win8789
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.

Re: Raspberry Pi in Codeblocks wiringPi.h

Verfasst: Mi Jan 04, 2017 10:16 pm
von win8789
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.

Re: Raspberry Pi in Codeblocks wiringPi.h

Verfasst: Do Jan 05, 2017 9:26 am
von Xin
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. :)

Re: Raspberry Pi in Codeblocks wiringPi.h

Verfasst: Do Jan 05, 2017 10:08 am
von cloidnerux
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.

Re: Raspberry Pi in Codeblocks wiringPi.h

Verfasst: Do Jan 05, 2017 10:20 am
von Xin
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.

Re: Raspberry Pi in Codeblocks wiringPi.h

Verfasst: Do Jan 05, 2017 5:53 pm
von win8789
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