web-dev-qa-db-ja.com

ncursesの使用中の `stdscr 'への未定義の参照

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

私のエラー:

/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'
11
Fari

Centos6.2のncursesプログラムでこの問題が発生していました。 ncursesは、ncursestinfoの2つのライブラリに分割されることがあります。私の場合、stdscrはlibncursesではなくlibtinfoに存在するため、-ltinfoの後に-lncursesをリンク行に追加すると問題が解決しました。

21
Ogre

あなたが先に進んだことは知っていますが、将来の参考のために:同じ問題が発生したとき、それは-l引数の配置が原因でした。試してください:

skygrid: skygrid.o commServer.o pose.o robot.o
    $(LINK) -o $@ $^ $(LDFLAGS)

詳細については、gccのマニュアルを参照してください。 http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

そしてSOのこのスレッド: gccでの `-l 'オプションの配置

3
ezra buchla

user1246043、

私も同様の問題を抱えています。基本的に、g ++ 4.5またはg ++ 4.6でコンパイルできないので、g ++ 4.4をインストールして使用しました。これにより、ncurseswへのリンクに関する私の問題が具体的に解決されました。

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

エラーメッセージはskygrid.cppソースファイルの特定の行を参照しているため、リンカーエラーではありません。

おそらく追加する必要があります

#include <curses.h>

そのソースファイルの先頭に。

1
Keith Thompson

Cscope15.8をビルドするときに同じ問題が発生しました。

./configure、最初に「ncurses.h」が見つからないというエラーが表示されます。これは、OSにlibncurses-devがインストールされていないためです。

Libcurses-devをインストールした後、makeを直接実行します。次に、数十の「未定義の参照」エラーが発生しました。

最初から再構築した後、これらのエラーはなくなりました。

./configure

make

1
langdead

Qtタイマーとncursesを使用すると、同様の問題に直面しました。タイムアウトマクロはQtコードを台無しにします=)解決策は_"#undef timeout"_の後に_#include <ncurses.h>_で、マクロが機能しないようにしました。また、場合によってはncursesタイムアウトが必要になる場合は、wtimeout(stdscr,delay)を直接実行できます。

0
Andrey Suvorov