2012-03-02 40 views
7

Tôi đang cố gắng biên dịch mã của mình trong Ubuntu 11.10 và nhận được các lỗi này và hơn thế nữa.Đến nay bằng cách googling nó tôi nghĩ rằng đó là một lỗi liên kết. Cụ thể, đã có các đề xuất để đảm bảo bạn có các tiêu đề phù hợp và liên kết thư viện -lncurses. Tôi đã làm điều đó rồi. Tôi vẫn nhận được lỗi này. Tôi cũng đọc có thể là tôi nên cài đặt libncurses, nhưng tôi đã có nó được cài đặt.không xác định tham chiếu đến `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 

lỗi của tôi:

/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

Quy ước là sử dụng CPP dùng cho preprocessor, CPPFLAGS như cờ dùng cho preprocessor, CXX cho C++, và CXXFLAGS cho cờ để CXX. Gán CPP như một trình biên dịch C++ sẽ làm xáo trộn các quy tắc ngầm định của chúng ta. –

+1

Cảm ơn tất cả những ai đã cố gắng giúp đỡ. Tôi thực sự không còn làm việc với mã này nữa và tôi cũng không có quyền truy cập vào nó. Vì vậy, tôi đã không thử bất cứ điều gì khác hơn những gì Keith Thompson đã đề xuất và điều đó đã không làm việc cho tôi. Đối với những người khác có thể đang chạy vào cùng một vấn đề, hãy thử các câu trả lời khác và đánh dấu chúng hữu ích nếu chúng là như vậy. – Fari

+1

Tôi đã gặp vấn đề tương tự và cách khắc phục là sử dụng lệnh -l ở cuối: 'gcc -o hello hello.c -lncurses' – jcubic

Trả lời

1

Kể từ khi thông báo lỗi chỉ đến dòng cụ thể trong tập tin nguồn skygrid.cpp của bạn, họ không Linker lỗi.

Bạn có thể cần phải thêm

#include <curses.h> 

lên đỉnh source file đó.

+0

Cảm ơn bạn đã trả lời. Tôi đã có #include trong tệp của mình. Mã này đang biên dịch và đã chạy trên các máy tính khác có phiên bản cũ hơn của Ubuntu và trên máy Mac (quên chính xác os), không phải trên máy tính của tôi với Ubuntu 11.10. – Fari

+0

Rất tiếc. Tôi không có nguồn của bạn, nhưng tôi đặt cùng một ví dụ nhỏ trên hệ thống Ubuntu 11.04 của riêng tôi và nó hoạt động. https://gist.github.com/1968401 –

+0

Cảm ơn, tôi đánh giá cao sự giúp đỡ của bạn. Tôi sẽ thử mã ví dụ trên máy tính của tôi khi tôi có cơ hội và tôi sẽ cho bạn biết nếu nó hoạt động. – Fari

1

user1246043,

Tôi đã gặp sự cố tương tự. Về cơ bản, tôi không thể biên dịch wiht g ++ 4.5 hoặc g ++ 4.6, vì vậy tôi đã cài đặt g ++ 4.4 và sử dụng nó. Điều này đặc biệt giải quyết vấn đề của tôi với liên kết đến ncursesw.

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

Thanks @baffled ... –

13

Tôi gặp sự cố này với chương trình ncurses trên Centos 6.2. Nó chỉ ra rằng ncurses đôi khi được chia thành hai thư viện, ncurses và tinfo. Trong trường hợp của tôi, stdscr tồn tại trong libtinfo, không phải trong libncurses, do đó, thêm -ltinfo vào dòng liên kết, sau khi -lncurses, giải quyết vấn đề.

+1

Tôi đã bỏ lỡ cờ -lncurses. sẽ không có figured nó ra wo bài này :) – simgineer

0

tôi phải đối mặt với vấn đề tương tự, khi sử dụng Qt hẹn giờ và ncurses: timeout macro làm hỏng mã Qt =) Giải pháp là "#undef timeout" sau #include <ncurses.h> để ngăn macro hoạt động. Và nếu trong một số trường hợp, bạn sẽ cần ncurses thời gian chờ, bạn có thể chạy trực tiếp wtimeout(stdscr,delay).

1

Tôi đã đưa ra cùng một vấn đề khi xây dựng cscope 15.8.

Sau ./configure, trước tiên tôi gặp lỗi khi nói "ncurses.h" không tìm thấy. Đó là bởi vì không có libncurses-dev được cài đặt trên os của tôi.

Sau khi cài đặt libcurses-dev, tôi chạy trực tiếp make. Sau đó, có hàng tá lỗi "không xác định tham chiếu đến".

Sau khi xây dựng lại từ đầu một lần nữa, các lỗi này đã biến mất.

./configure

make

+0

haha ​​... Đã làm việc cho tôi là tốt – RootPhoenix

Các vấn đề liên quan