2012-03-02 20 views
7

Estoy tratando de compilar mi código en Ubuntu 11.10 y obtener estos errores y más. Por lo tanto, buscándolo en Google creo que es un error de enlace. Específicamente, ha habido sugerencias para asegurarse de tener los encabezados correctos y vincular la biblioteca -lncurses. Ya he hecho eso. Todavía estoy recibiendo este error. También leí que podría ser que debería instalar el libncurses, pero ya lo tengo instalado.referencia indefinida a `stdscr '

My MakeFile: 
CPP   = g++ 
CPPFLAGS  = -c -Wall -g 
LINK   = g++ 
LDFLAGS_LINUX = -lpthread -lncurses 
LDFLAGS  = $(LDFLAGS_LINUX) 
RM   = rm 


.SUFFIXES: 
.SUFFIXES: .o .cpp 

.cpp.o: 
    $(CPP) $(CPPFLAGS) $*.cpp -o $(SRC_DIR)$*.o 

all: skygrid 

skygrid: skygrid.o commServer.o pose.o robot.o 
    $(LINK) $(LDFLAGS) -o [email protected] $^ 

clean: 
    $(RM) -rf *.o skygrid 

skygrid.o: skygrid.cpp definitions.h commServer.h pose.h robot.h 
commServer.o: commServer.cpp commServer.h 
pose.o:  pose.cpp pose.h 
robot.o: robot.cpp robot.h pose.h 

Mis Errores:

/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1094: undefined reference to `stdscr' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1094: undefined reference to `stdscr' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1094: undefined reference to `stdscr' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1094: undefined reference to `stdscr' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1104: undefined reference to `werase' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1106: undefined reference to `wprintw' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1107: undefined reference to `wprintw' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1109: undefined reference to `wprintw' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1111: undefined reference to `stdscr' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1111: undefined reference to `wgetch' 
/home/fari/Desktop/FarahSkygrid/skygrid/src/skygrid.cpp:1116: undefined reference to `wtouchln' 
+0

La convención es utilizar CPP para el preprocesador, CPPFLAGS como banderas para el preprocesador, CXX para el compilador de C++, y CXXFLAGS para banderas para CXX. Asignar CPP como un compilador de C++ destruirá las reglas implícitas de make. –

+1

Gracias a todos los que intentaron ayudar. De hecho, ya no estoy trabajando con este código y tampoco tengo acceso a él. Entonces, no probé nada más que lo que sugirió Keith Thompson y eso no me había funcionado. Para otras personas que puedan encontrarse con el mismo problema, intente con las otras respuestas y márquelas útiles si es así. – Fari

+1

Estaba teniendo el mismo problema y la solución era usar -l al final: 'gcc -o hello hello.c -lncurses' – jcubic

Respuesta

1

Puesto que los mensajes de error se refieren a líneas específicas en el archivo de origen skygrid.cpp, no están enlazador errores.

es probable que tenga que añadir

#include <curses.h> 

a la parte superior de ese archivo de origen.

+0

Gracias por su respuesta. Ya tengo #include en mi archivo. Este código se está compilando y ya se está ejecutando en otras computadoras con una versión anterior de Ubuntu y en una Mac (se olvidó el sistema operativo exacto), pero no en mi computadora con Ubuntu 11.10. – Fari

+0

Impar No tengo sus fuentes, pero armé un pequeño ejemplo en mi propio sistema Ubuntu 11.04, y funciona. https://gist.github.com/1968401 –

+0

Gracias, agradezco su ayuda. Voy a probar tu código de ejemplo en mi computadora cuando tenga oportunidad y te avisaré si funciona. – Fari

1

user1246043,

He tenido un problema similar. Básicamente, no puedo compilar con g ++ 4.5 o g ++ 4.6, así que instalé g ++ 4.4 y lo utilicé. Esto resolvió específicamente mi problema con la vinculación a ncursesw.

# Makefile: 
CXX=g++-4.4                 
CXXLIBS=-lncursesw               
CXXFLAGS=-Wall 
# Other stuff omitted 
+0

Gracias @baffled ... –

13

Estaba teniendo este problema con un programa ncurses en Centos 6.2. Resulta que ncurses a veces se divide en dos bibliotecas, ncurses y tinfo. En mi caso, stdscr existe en libtinfo, no en libncurses, por lo que al agregar -ltinfo a la línea de enlace, después de -lncurses, se solucionó el problema.

+1

Me faltaba solo el distintivo -lncurses. no lo hubiera entendido esta publicación :) – simgineer

0

que enfrentan a problemas similares, cuando el uso del temporizador y ncurses Qt: tiempo de espera macros ruin out Qt code =) La solución fue "#undef timeout" después de #include <ncurses.h> para evitar que las macros funcionen. Y si en algunos casos necesitará ncurses timeout, puede ejecutar wtimeout(stdscr,delay) directamente.

1

Se me ocurrió el mismo problema al construir cscope 15.8.

Después de ./configure, aparece el error "ncurses.h" no encontrado. Es porque no hay libncurses-dev instalado en mi sistema operativo.

Después de instalar libcurses-dev, ejecuto make directamente. Luego obtuve docenas del error de "referencia no definida".

Después de volver a generar desde el inicio, estos errores desaparecieron.

./configure

make

+0

jaja ... También funcionó para mí – RootPhoenix