Probleme mit iostream

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Einen wunderschönen guten morgen.

    Ich bin gerade dabei mir mein SPI-Treiber für den Raspberry Pi zu schreiben. Dabei bin ich auf ein Problem gestoßen.

    Ich verwende den gcc Compiler, habe mit dem g++ Compiler aber das gleiche Problem.

    Und zwar kann er folgenden Befehl nicht Compilieren:
    #include <iostream>

    dann später kommt bei mir folgende Zeile, weshalb ich iostream brauche:
    *spi_cs_fd = open(std::string("/dev/spidev0.1").c_str(),O_RDWR);

    Kann ich den Code auch anders schreiben oder welchen Compiler muss ich verwenden, damit der Code läuft?

    Die Version von gcc ist 4.6.3

    Vielen Dank für eure Hilfe

    Gruß Xeriox

    <--Heute ist ein guter Tag zum basteln-->

    Einmal editiert, zuletzt von Xeriox (24. Oktober 2014 um 07:59)

  • 1) Ohne Fehlermeldung die der Compiler Dir ausspuckt wird Dir wohl niemand sagen können wieso dein Code nicht läuft.

    2)


    *spi_cs_fd = open(std::string("/dev/spidev0.1").c_str(),O_RDWR);

    Ich bin zwar eher ein C als ein C++ Coder, aber: Du nutzt std::string, um eine C++ String Klasse zu instanziieren, und rufst dann c_str() auf, um daraus wieder nen C String zu machen? Das ist doch doppeltgemoppelt, wieso schreibst du "/def/spidev0.1" nicht direkt rein?


    *spi_cs_fd = open("/dev/spidev0.1",O_RDWR);

  • Ich würde jetzt mal drauf tippen, dass Du den g++ gar nicht installiert hast. Kann das sein?
    Mal ganz abgesehen davon, dass ich es (wegen des Overheads) für eine eher suboptimale Lösung finde, Treiber in C++ zu schreiben - mal vorausgesetzt dass das überhaupt funktioniert ...
    Der gcc ist jedenfalls standardmässig drauf ...

    Nachtrag:
    schau mal mit dpkg nach:

    Code
    pi@raspberrypi ~ $ dpkg -l | grep g++
    ii  g++                                   4:4.9.1-1                               armhf        GNU C++ compiler
    ii  g++-4.6                               4.6.4-5+rpi1                            armhf        GNU C++ compiler
    ii  g++-4.7                               4.7.3-11+rpi1                           armhf        GNU C++ compiler
    ii  g++-4.8                               4.8.3-11                                armhf        GNU C++ compiler
    ii  g++-4.9                               4.9.1-15                                armhf        GNU C++ compiler
    pi@raspberrypi ~ $

    cu,
    -ds-


  • Und zwar kann er folgenden Befehl nicht Compilieren:
    #include <iostream>

    Linke die library "libstdc++" wenn Du gcc und c++ benutzt. Z. B.:

    Code
    gcc -o iohallo iohallo.cc -lstdc++

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample


  • das bringt nix, wenn er scheinbar schon die header-Datei nicht findet ...

    OK, dann könnte er danach schauen:

    Code
    ~ $ sudo find /usr/include/c++ -iname 'iostream'
    /usr/include/c++/4.6/iostream
    Code
    ~ $ file /usr/include/c++/4.6/iostream
    /usr/include/c++/4.6/iostream: C source, ASCII text

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample


  • naja ... das funktioniert aber nur, wenn er g++ 4.6 drauf hat ;) ...


    Nein, nicht nur wenn er 4.6 drauf hat, denn er sucht nicht nach 4.6, er sucht nach bzw. in "c++":

    Code
    sudo find /usr/include/c++ -iname 'iostream'

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (24. Oktober 2014 um 21:50)

  • Hi combie,

    nö ... c++ ... da ist alles anders - irgendwie und was weiss ich. Ich steh' auch nicht besonders drauf. Ist mir irgendwie zu dubios :fies:
    Aber ein "Hello World"


    sieht in C++ tatsächlich so aus.

    salü,
    -ds-

  • Vielen Dank erstmal an alle. Habe dies ausprobiert und der Compiler spuckt mir keinen Fehler aus. Testen kann ich es leider noch nicht, da mir die Hardware dazu noch fehlt.

    Ich programmiere auch lieber in C als in C++, aber ich habe keinen anderen SPI Treiber für den Raspberry Pi in reinem C gefunden.

    Viele Grüße

    Xeriox

    <--Heute ist ein guter Tag zum basteln-->

    Einmal editiert, zuletzt von Xeriox (27. Oktober 2014 um 08:03)

  • > Und zwar kann er folgenden Befehl nicht Compilieren:
    > #include <iostream>
    >
    > dann später kommt bei mir folgende Zeile, weshalb ich iostream brauche:
    > *spi_cs_fd = open(std::string("/dev/spidev0.1").c_str(),O_RDWR);
    GAAANZ SICHER ???

    Ich vermute eher, dass das open zum Linux-API gehoert und nicht zur
    C++-Library. Der Returnwert ist ja anscheinend auch ein Filedescriptor.

    Der Code sieht insgesamt etwas fragwuerdig aus. Ich wuerde ihn noch
    sehr genau inspizieren bevor ich darauf aufsetze !

Jetzt mitmachen!

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