2012-03-02 12 views
7

私はUbuntu 11.10で自分のコードをコンパイルしようとしていますが、これらのエラーとmoreを取得しています。具体的には、適切なヘッダーがあり、-lncursesライブラリをリンクさせるための提案があります。私はすでにそれをしています。私はまだこのエラーが発生しています。私はlibncursesをインストールしなければならないかもしれないが、それはすでにインストールされているかもしれません。`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 

マイエラー:

/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

規則は、C++コンパイラのCXX、プリプロセッサのフラグとして、プリプロセッサためCPPFLAGSをCPPを使用することであり、CXXにフラグのCXXFLAGS。 C++コンパイラとしてのCPPの割り当ては、makeの暗黙的なルールをマングルするでしょう。 –

+1

助けようとしたすべての人に感謝します。私は実際にはこのコードで作業していませんし、アクセスもしていません。だから、私はKeith Thompsonが提案したこと以外に何も試していないし、私のために働いていなかった。他の人が同じ問題に遭遇している可能性がある場合は、他の回答を試してください。 – Fari

+1

私は同じ問題を抱えていました。最後に-lを使用するように修正されました: 'gcc -o hello hello.c -lncurses' – jcubic

答えて

1

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

おそらく、そのソースファイルの先頭に

#include <curses.h> 

を追加する必要があります。

+0

ありがとうございました。私はすでに#include を私のファイルに持っています。このコードはUbuntuの以前のバージョンを搭載した他のコンピュータやMac上でコンパイルして実行しています(正確なOSは忘れています)。 – Fari

+0

Odd。あなたのソースはありませんが、自分のUbuntu 11.04システムに小さなサンプルをまとめています。 https://gist.github.com/1968401 –

+0

ありがとう、私はあなたの助けに感謝します。私はチャンスを得ると私のコンピュータ上であなたのサンプルコードを試し、それがうまくいくかどうか教えてくれます。 – Fari

1

user1246043、

私も同様の問題が発生しています。基本的に、g ++ 4.5またはg ++ 4.6をコンパイルできないので、g ++ 4.4をインストールして使用しました。これはncurseswにリンクすることで私の問題を特に解決しました。

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

Thanks @baffled ... –

13

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

+1

ちょうど-lncursesフラグがありませんでした。私はこの投稿を考えていないだろう:) – simgineer

2

私はあなたが前に進んだことを知っていますが、将来の参照のために、私の推測は、問題が-l引数の配置にあるということです。試してみてください。詳細については

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

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

とSO上でこのスレッド: Placement of `-l' option in gcc

0

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

1

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

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

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

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

./configure

make

+0

haha​​ ...私のためにも働いた – RootPhoenix