error: undefined reference to wgetch



  • täddes schrieb:

    in vielen Forenbeiträgen steht man soll es doch einfach mit cin machen. Aber für miene Zwecke liege ich mit getch schon richtig?

    Ja, denke schon. Mit cin würdest Du nur was geschickt bekommen, wenn der User enter drückt.

    Scheint mir nicht zu

    schleife{
      if(d == '+')
      {
        std::cout << "forwards\n";
        msg.velocities[0].value = 10;
      }
    

    zu passen.



  • täddes schrieb:

    Ich habe die library mit

    gcc -static my_publisher.cpp -o curses -lncurses

    nochmal verlinkt, weil ich mir nicht mehr sicher war. Jedenfalls bekomme ich immer noch den gleichen fehler
    ..?

    stimmt was mit der verlinkung nicht?

    Jetzt kanns nicht gehen, weil Du cout benutzt und nur gcc statt g++.

    Falls es weiter nicht klappt, schreib bei der Farge bitte nochmal zusammen einen möglichst kleinen testfähigen Code, den Compileraufruf und die Fehlermeldung.

    Bei mir wäre das:
    Datei my_publisher.cpp

    #include <curses.h>
    #include <iostream>
    using namespace std;
    
    int main(){
            for(;;){
                    int x=getch();
                    if(x!=-1)
                    cout<<x<<' '<<flush;
            }
    }
    

    Aufruf:

    g++ -static my_publisher.cpp -o curses -l curses
    

    Fehlermeldung:

    /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lcurses
    collect2: error: ld returned 1 exit status
    


  • Also gut, habe die library wie folgt verlinkt:

    g++ -static my_publisher.cpp -o curses -l curses
    

    Der Code in Kurzzusammenfassung sieht so aus:

    #include "iostream"
    #include <curses.h>
        	char c,d;
        	c = getch();
    

    Das ist der ganze Zauber.
    Und er gibt mir immer noch undefined reference



  • Warum eigentlich static? Liegt denn ncurses als static-library vor?



  • Hast du 32/64 Bit vermischt?
    Hilft

    g++ -m32 -static my_publisher.cpp -o curses -l curses
    

    Was liefert

    nm <Lib mit Pfadname> | grep wgetch
    


  • Hey sorry
    ich bin ganz frisch mit linux ://
    ich hab keine Ahnung wo die library hin installiert wurde. wie finde ich das heraus?



  • g++ -static my_publisher.cpp -o curses -l curses -Wl,--verbose
    

    sollte dir auch eine Übersicht über die Libs ausspucken.

    Wenn du allerdings glaubst, auf dir gestellte Fragen nicht weiter eingehen zu müssen, wirst du wohl keine weitere Hilfe bekommen.



  • SeppJ schrieb:

    hardware schrieb:

    Ich hab mal so eine Verständnisfrage: Was ist der Unterschied zu cin.get()? Das erscheint mit irgendwie einfacher und ist in der stdlib.

    Sehr große Unterschiede. Hast du mal die Doku gelesen?

    wgetch arbeitet auf einer Tastatur, nicht auf stdin. wgetch zielt auf ein "Fenster". wgetch hat einen nicht-blockierenden Modus. wgetch hat ein optionales(!) echo. wgetch auf Wunsch entweder das getippte Zeichen oder die gedrückten Tasten.

    Besonders der erste Punkt ist der entscheidende Unterschied, der Rest ist mehr oder weniger Konsequenz daraus. wgetch ist eben die Tastenabfrage einer Konsolenbibliothek, cin.get() ist ein Zeichenextraktor auf einem abstrakten Zeichenstrom (im Fall von cin ist das stdin). Standard-C++ kennt keine Tastaturen, Fenster, Konsolen, und so weiter. Standard-C++ läuft in einem schwarzen Kasten wo ein Laufband mit Zeichen drauf reingeht und zwei bedruckte Bänder wieder rausgehen. Entsprechend beschränkt (und portabel!) sind die Möglichkeiten.

    Vielen Dank für deine sehr ausführliche Erklärung, mir vieles klarer geworden.



  • manni66 schrieb:

    Was liefert

    nm <Lib mit Pfadname> | grep wgetch
    

    tut mir leid ich hab vergessen drauf zu antworten.
    das liefert: bash: Syntaxfehler beim unerwarteten Wort »|«

    ich wurde jetzt an einen neuen pc gesetzt und habe dort direkt

    g++ -m32 -static my_publisher.cpp -o curses -l curses
    

    ins terminal eingegeben und ich bekomme aber

    /usr/include/features.h:324:26: schwerwiegender Fehler: bits/predefs.h: Datei oder Verzeichnis nicht gefunden
    Kompilierung beendet.
    

    manni66 schrieb:

    g++ -static my_publisher.cpp -o curses -l curses -Wl,--verbose
    

    sollte dir auch eine Übersicht über die Libs ausspucken.

    die übersicht über die libs ist für terminal neulinge echt nicht so leicht zu analysieren aber ich hab zumindest nichts von libncurses gefunden.

    vielen dank für die antworten auch wenn es vielleicht noch nicht gelöst ist, hoffe ich dass der ein oder andere noch nicht aufgibt 🙂



  • Oder weiss jemand ein ähnliches Problem das im Forum besprochen wurde?
    Ich komme alleine nicht weiter und habe auch nichts passendes im forum gefunden.
    Danke ((:



  • Was erwartest du denn hier noch?

    - Warum du static verwendest hast du nicht beantwortet.
    - Das nm kopierst du ohne Sinn und Verstand einfach in die Konsole, ohne den Pfad anzugeben und wunderst dich über die Fehlermeldung der Bash.
    - Bei der Suche nach der Lib fühlst du dich als Neuling überfordert.

    Zaubern kann hier keiner.



  • Was liefert

    nm <Lib mit Pfadname> | grep wgetch
    

    AH! wenn ich

    |
    

    weggelassen habe aht es funtioniert und es stand dran:

    nm: 'wgetch': No such file
    

    hilft das weiter?


  • Mod

    täddes schrieb:

    Was liefert

    nm <Lib mit Pfadname> | grep wgetch
    

    AH! wenn ich

    |
    

    weggelassen habe aht es funtioniert und es stand dran:

    nm: 'wgetch': No such file
    

    hilft das weiter?

    Nein, das ist einfach nur Unsinn.

    Da mit wir ganz sicher auf einer Linie sind: Du hast nicht wirklich wortwörtlich "<Lib mit Pfadname>" geschrieben, sondern da schon den Namen und Pfad der Bibliothek eingesetzt (ohne die <>!)?


Anmelden zum Antworten