对`stdscr'的未定义引用

Far*_*ari 11 c++ linker compilation ncurses

我试图在Ubuntu 11.10中编译我的代码并得到这些错误和更多.所以通过谷歌搜索它我认为这是一个链接错误.具体来说,有建议确保您拥有正确的标头并链接-lncurses库.我已经这样做了.我仍然收到这个错误.我还读到可能是我应该安装libncurses,但我已经安装了它.

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 $@ $^

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
Run Code Online (Sandbox Code Playgroud)

我的错误:

/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'
Run Code Online (Sandbox Code Playgroud)

小智 19

我在Centos 6.2上使用ncurses程序遇到了这个问题.事实证明,ncurses有时会分成两个库,ncurses而且tinfo.在我的情况下,stdscr存在于libtinfo,而不是在libncurses中,所以添加-ltinfo到链接行后-lncurses,解决了问题.

  • 我只是缺少-inccurses标志。不会想出这个帖子:) (2认同)

ezr*_*hla 5

我知道您已经继续前进,但为了将来的参考:当我遇到同样的问题时,这是由于 -l 参数的放置造成的。尝试:

skygrid: skygrid.o commServer.o pose.o robot.o
    $(LINK) -o $@ $^ $(LDFLAGS)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅 gcc 手册: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

以及此线程上的 SO: Placement of `-l' option in gcc


Kei*_*son 1

由于错误消息引用源文件中的特定行skygrid.cpp,因此它们不是链接器错误。

您可能需要添加

#include <curses.h>
Run Code Online (Sandbox Code Playgroud)

到该源文件的顶部。