Clion nie może obsłużyć biblioteki ncurses.h

0

Cześć

Mam dziwny problem chce wykorzysrać do swojego projektu biblioteke ncurses.h. Udało mi się już zbudować progrma. Ale przy pierwszym uruchomieniu dostałem coś takiego:

Error opening terminal: unknown.

Potem w Edit Configuration -> Build All -> Environment variables -> dodaje TERM=xterm

i dostaje coś takiego:

(0[0mlqqqqqqqqqqqqqqqqqqqqqk(B[11;29H(0[0mx(B   Move the window   (0[0mx(B[12;29H(0[0mx(B with the arrow keys (0[0mx(B[13;29H(0[0mx(B     or HOME/END     (0[0mx(B[14;29H(0[0mx(B[14;51H(0[0mx(B[15;29H(0[0mx(B  Press 'q' to quit  (0[0mx(B[16;29H(0[0mmqqqqqqqqqqqqqqqqqqqqqj(B[H(0[0m(B

Czy może ktoś z was spotkał się z taki problemem?

0

Mam pytanie? Co do tego problem ma "CLion"? To jest tylko IDE- narzędzie, które sugeruje, że używasz gcc.
Zainicjalizowałeś ncurses prawidłowo? Czy twoja platforma jest wspierana, prze ncurses?

0

Mam Debian i zainstalowałem bibliotekę tak:

sudo apt-get install libncurses5-dev libncursesw5-dev

0

Zainicjalizowałeś ncurses prawidłowo?
Czyli czy program zaczyna od:

int main()
{
    initscr();

    // twoj kod tutaj

    endwin();
    exit(EXIT_SUCCESS);
}
0

sorry zapomniałem dodać kodu

#include <stdlib.h>
#include <stdio.h>
#include <ncurses.h>


int main(void) {

    WINDOW * mainwin, * childwin;
    int      ch;


    /*  Set the dimensions and initial
	position for our child window   */

    int      width = 23, height = 7;
    int      rows  = 25, cols   = 80;
    int      x = (cols - width)  / 2;
    int      y = (rows - height) / 2;


    /*  Initialize ncurses  */

    if ( (mainwin = initscr()) == NULL ) {
        fprintf(stderr, "Error initialising ncurses.\n");
        exit(EXIT_FAILURE);
    }


    /*  Switch of echoing and enable keypad (for arrow keys)  */

    noecho();
    keypad(mainwin, TRUE);


    /*  Make our child window, and add
	a border and some text to it.   */

    childwin = subwin(mainwin, height, width, y, x);
    box(childwin, 0, 0);
    mvwaddstr(childwin, 1, 4, "Move the window");
    mvwaddstr(childwin, 2, 2, "with the arrow keys");
    mvwaddstr(childwin, 3, 6, "or HOME/END");
    mvwaddstr(childwin, 5, 3, "Press 'q' to quit");

    refresh();


    /*  Loop until user hits 'q' to quit  */

    while ( (ch = getch()) != 'q' ) {

        switch ( ch ) {

            case KEY_UP:
                if ( y > 0 )
                    --y;
                break;

            case KEY_DOWN:
                if ( y < (rows - height) )
                    ++y;
                break;

            case KEY_LEFT:
                if ( x > 0 )
                    --x;
                break;

            case KEY_RIGHT:
                if ( x < (cols - width) )
                    ++x;
                break;

            case KEY_HOME:
                x = 0;
                y = 0;
                break;

            case KEY_END:
                x = (cols - width);
                y = (rows - height);
                break;

        }

        mvwin(childwin, y, x);
    }


    /*  Clean up after ourselves  */

    delwin(childwin);
    delwin(mainwin);
    endwin();
    refresh();

    return EXIT_SUCCESS;
}
0

Rozumiem, że jak puścisz Twój program ręcznie w xtermie to działa ok?

Edit: jeśli tak, https://stackoverflow.com/questions/36281187/clion-run-program-in-separate-system-terminal/43070279

0

tak wszystko działa:

g++ main.cpp -lncurses -o test

i program się odpala w xterm + terminator
to dlaczego Clion tego nie widzi?

0

Bo pewnie nie jest kompatybilny z POSIXowym terminalem?

0
87kelthuzad napisał(a):

tak wszystko działa:

g++ main.cpp -lncurses -o test

i program się odpala w xterm + terminator
to dlaczego Clion tego nie widzi?

Pytanie. Jak zbudujesz projekt w CLion, a potem uruchomisz go z poza CLion (z samego terminala ręcznie), to czy to działa czy nie?
CLion powinien to budować dokładnie tak samo jak robisz to z linii poleceń, bo w końcu używa tego samego toolchain-a.
Jeśli ci nie działa, to najwyraźniej CLion zmienia coś w ustawieniach, gdy odpala proces w trybie debug.
W trybie release też masz ten problem?

Albo to jest problem z używaniem aplikacji konsolowej z gdb (nie będzie to pierwszy taki przypadek, z tego powodu przez lata były problemy z debugowaniem aplikacji konsolowych).
Spróbuj tak, by zobaczyć czy problem się powtarza:

g++ -g main.cpp -lncurses -o test
gdb test
0
87kelthuzad napisał(a):

i dostaje coś takiego:

(0[0mlqqqqqqqqqqqqqqqqqqqqqk(B[11;29H(0[0mx(B   Move the window   (0[0mx(B[12;29H(0[0mx(B with the arrow keys (0[0mx(B[13;29H(0[0mx(B     or HOME/END     (0[0mx(B[14;29H(0[0mx(B[14;51H(0[0mx(B[15;29H(0[0mx(B  Press 'q' to quit  (0[0mx(B[16;29H(0[0mmqqqqqqqqqqqqqqqqqqqqqj(B[H(0[0m(B

Wygląda że biblioteka działa - generuje kody ANSI sterujące terminalem. To terminal który ustawiłeś (xterm) ich z jakiegoś powodu nie interpretuje prawidłowo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1