我尝试在Ubuntu 12.04 LTS中使用ncurses库。它不起作用。 我一步一步走:
安装:
sudo apt-get update
sudo apt-get install libncurses-dev
main.cpp中:
#include <curses.h>
#include <ncurses.h>
int main(int argc, char *argv[])
{
initscr(); // Start curses mode
printw("Hello World !!!");
refresh(); // Print it on to the real screen
getch(); // Wait for user input
endwin(); // End curses mode
}
makefile,添加-lncurses 进行链接和编译:
all: main
OBJS = main.o
CXXFLAGS += -std=c++0x
CXXFLAGS += -c -Wall
main: $(OBJS)
g++ -lncurses $^ -o $@
%.o: %.cpp %.h
g++ $(CXXFLAGS) -lncurses $<
main.o: main.cpp
clean:
rm -rf *.o *.d main
reset
run:
./main
构建(获取错误):
$ make
g++ -std=c++0x -c -Wall -c -o main.o main.cpp
g++ -lncurses main.o -o main
main.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `initscr'
main.cpp:(.text+0x16): undefined reference to `printw'
main.cpp:(.text+0x1b): undefined reference to `refresh'
main.cpp:(.text+0x20): undefined reference to `stdscr'
main.cpp:(.text+0x28): undefined reference to `wgetch'
main.cpp:(.text+0x2d): undefined reference to `endwin'
collect2: ld returned 1 exit status
make: *** [main] Error 1
我错过了什么吗?
答案 0 :(得分:0)
链接器按照它们指定的顺序处理参数,跟踪先前参数中未解析的符号,并在后面的参数中找到它们。这意味着-lncurses
参数(定义符号)必须跟随 main.o
参数(引用它们)。
在Makefile
中,更改此内容:
main: $(OBJS)
g++ -lncurses $^ -o $@
到此:
main: $(OBJS)
g++ $^ -lncurses -o $@