Error usando la libreria ncurses (solucionado)

Imagen de virako
0 puntos

Como la libreria conio.h es de Borland he instalado la libreria ncurses, compilar lo hace correctamente, pero al construir me el siguiente error:

construyendo el archivo: entrada_salida5.c ...

gcc "entrada_salida5.c" -o "entrada_salida5"

/tmp/cc6t1siN.o: In function 'main':

entrada_salida5.c:(text+0xb): undefined reference to 'stdscr'

entrada_salida5.c:(text+0x10): undefined reference to 'wgetch'

collect2: Id devolvió el estado de salida 1

Completado ...incorrectamente

El archivo que compilo es este, porque estoy siguiendo un libro para aprender a programar:

#include <stdio.h>
#include <curses.h>
int main (void)
{
char letra;

letra = getch();
putchar (letra);
}

Espero que podais ayudarme en breve, Gracias.

Imagen de jlldUOO
+1
0
-1

Como estas?, Mira el problema esta en la forma de compilar tu programa , cuando compilas un programa con instrucciones estandar (por llamarlo de algun modo) la forma de hacerlo es:  gcc arch_prog.c -o arch_ejecutable, pero para compilar un programa con ncurses es de esta forma gcc arch_prog.c -o arch_ajecutable -lncurses si mal no recuerdo.

 

Cualquier otra duda, encantado te ayudo.

+1
0
-1
Imagen de virako
+1
0
-1

Yo esque suelo compilar con Anjuta, con la tecla F9, construyo con F11 y ejecuto con F3. Si sabes que hay que hacer en Anjuta para que se ejecute, por favor, ayudame.

Gracias por tu respuesta 

+1
0
-1
Imagen de jlldUOO
+1
0
-1

No, lo lamento soy novato igual que tu y no utilzo anjunta solo utilizo vim, pero prueba tu pequeño programa compilandolo en la linea de ordenes y me cuentas como te fue.

+1
0
-1
Imagen de virako
+1
0
-1

Al intentar compilar como tu dices, "gcc arch_prog.c -o arch_ajecutable -lncurses", como mi programa no esta compilado ni construido no existe el executable, y construirlo no puedo porque es donde falla.

+1
0
-1
Imagen de juanman
+1
0
-1

No uso habitualmente Anjuta pero dado tu comentario lo abri luego de haberlo instalado hace un tiempo...

Si vas a Settings (lo tengo en ingles) ->Compiler and linker settings -> Pestaña Libraries-> escribes ncurses (no lncurses) y pones add-> Close-> Y pones yes a la pregunta q te hace...

Ahora funcionara, aunq si haces algun proyecto q no use curses, tendrias q sacar la opcion... 

Por eso, debe haber alguna otra forma para q te agregue las librerias solo al proyecto actual...

Pero para ir aprendiendo, sirve... 

+1
0
-1
Imagen de virako
+1
0
-1

he agregado la ncurses y cuando construyo me da el siguiente error:

construyendo el archivo entrada_salida5.c ...

gcc    "entrada_salida5.c"    -lnsurses -o "entrada_salida5"

/usr/bin/ld devolvió el estado de salida 1

Completado ...incorrectamente 

+1
0
-1
Imagen de juanman
+1
0
-1

Creo q le pifiaste, tenias q poner ncurses, y pusiste nsurses...

+1
0
-1
Imagen de virako
+1
0
-1

he puesto ncurses, pero no sale

+1
0
-1
Imagen de Cristobal López
+1
0
-1

¿Has instalado las librerías gcc y las ncurses desde synaptic antes de hacer nada?  Es que si no no va el asunto.

¿Qué pones exactamente cuando compilas tu programa?

Saludos :-) 

MiBlog

+1
0
-1
Imagen de virako
+1
0
-1

He instalado desde el synaptic las librerias ncurses y uso Anjuta, cuando compilo compila bien, y compilo usando el F9. Al construir con F11 es cuando me tira el error ke he mencionado anteriormente.

+1
0
-1
Imagen de Cristobal López
+1
0
-1

El error qaue te da en Anjuta es porque no reconoce ncurses, para que las reconozca tienes que hacer lo que te han explicado más arriba. De todas formas te aconsejo que primero compiles por terminal para asegurarnos que todo va ok, para ello :

gcc tuprograma.c -o tuprograma -lncurses

y para ejecutarlo

./tuprograma

Si quieres hice un videotutorial sobre compilar por terminal en C/C++, es bastante malillo pero si te sirve Pincha Aquí 

Saludos :-)

 

MiBlog

+1
0
-1
Imagen de Cristobal López
+1
0
-1

El include lo escribes mal, es ncurses y no curses, así:

#include <stdio.h>
#include <ncurses.h>
int main (void)
{
char letra;

letra = getch();
putchar (letra);
}

Te dejo un enlace que te servirá Pincha Aquí

Aunque tanto conio como ncurses están desfasadas!!! Pero para aprender a programar siempre vienen bien ;-)

Saludos :-)

MiBlog

+1
0
-1
Imagen de virako
+1
0
-1

He puesto tal y como tu me has dicho y me sigue dando el mismo error, aunque leere el link ke me has puesto, y ya contare despues ke tal me ha ido.

Gracias por las respuestas.  

+1
0
-1
Imagen de jlldUOO
+1
0
-1

No recuerdo bien, pero yo he realizado programas con ncurses hace algun tiempo atras, creo que da lo mismo escribir #include <curses.h> o #include <ncurses.h> no estoy seguro, pero el problema esta en compilarlo te suguiero que revises el manual de gcc para ver de que forma lo puedes compilar

 

+1
0
-1
Imagen de carleto
+1
0
-1

Desde consola, con:

gcc pruebacurses.c -o pruebacurses -lncurses

Nunca he usado anjuta, uso kdevelop, así que no puedo ayudarte más.

Saludos

+1
0
-1

Usuario registrado de Linux Nº 504222

Imagen de maubarrera
+1
0
-1

Usa getchar() en lugar de getch(), a mi me funciono con tu mismo codigo...

Saludos

+1
0
-1
Imagen de virako
+1
0
-1

poniendo getchar() me ha funcionado, gracias.

+1
0
-1
Imagen de webcracker
+1
0
-1

Y que tal con este código ??? 

Mismo error....con curses.h

#include <stdlib.h>
#include <curses.h>
#include <errno.h>
#include <unistd.h>
#include "utilfcns.h"

int main(void)
{
    int n, maxx, maxy;
    char *str;
   
    app_init();
   
    if(!has_colors()) {
    printw("Tu terminal no soporta colores..je\n");
    refresh();
    sleep(3);
    exit(EXIT_FAILURE);
    }
    if(start_color() == ERR)
    err_quit("start_color");
   
    /* Set up some simple color assignments */
    init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK);
    init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK);
    init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK);
    init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK);
    init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK);
    init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK);
    init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK);
    init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK);
   
    getmaxyx(stdscr, maxy, maxx);
    if((str = malloc(sizeof(char) * maxx)) == NULL)
    err_quit("malloc");
   
    for(n = 1; n <= 8; n++) {
    memset(str, ACS_BLOCK, maxx);
    attron(COLOR_PAIR(n));
    printw("%s", str);
    refresh();
    }
    sleep(3);
   
    app_exit();
    exit(EXIT_SUCCESS);
}
ALguna sugerencia...?

Gracias 

+1
0
-1
Imagen de jlldUOO
+1
0
-1

Imagino que el error se debe a que en tu libreria utilfcns.h hay una intruccion mal definida, como no muestras el error esto es una mera especulacion, dinos que error te lanza

 

+1
0
-1
Imagen de carlos_net
+1
0
-1

tengo un problema, cuando compilo los addons del asterisk para que me muestre la interfaz me pasa lo siguiente:
root@MYSERVERNAME:/usr/src/asterisk-addons-1.4.9# make menuselect -i
make[1]: Entering directory `/usr/src/asterisk-addons-1.4.9/menuselect'
make[2]: Entering directory `/usr/src/asterisk-addons-1.4.9/menuselect'
make[2]: `menuselect' is up to date.
make[2]: Leaving directory `/usr/src/asterisk-addons-1.4.9/menuselect'
make[1]: Leaving directory `/usr/src/asterisk-addons-1.4.9/menuselect'
**************************************************
*** Install ncurses to use the menu interface! ***
**************************************************
menuselect changes NOT saved!

indicandome que no esta el ncurses
procedo a instalarlo y me muestra lo siguiente:

root@MYSERVERNAME:/usr/src/asterisk-addons-1.4.9# sudo apt-get install ncurses
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
El paquete ncurses no está disponible, pero algún otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
encuentra disponible desde alguna otra fuente

E: El paquete «ncurses» no tiene un candidato para la instalación

que puedo hacer???

gracias de antemano...

+1
0
-1