ncurses不能使用-lncurses

时间:2015-10-26 04:19:03

标签: c++ linux ncurses curses

我尝试在Ubuntu 12.04 LTS中使用ncurses库。它不起作用。 我一步一步走:

  1. 安装:

    
    sudo apt-get update
    sudo apt-get install libncurses-dev
    

  2. 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
    }
    
  3. 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
    

  4. 构建(获取错误):

    $ 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
    
  5. 我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

链接器按照它们指定的顺序处理参数,跟踪先前参数中未解析的符号,并在后面的参数中找到它们。这意味着-lncurses参数(定义符号)必须跟随 main.o参数(引用它们)。

Makefile中,更改此内容:

main: $(OBJS)
    g++ -lncurses $^ -o $@

到此:

main: $(OBJS)
    g++ $^ -lncurses -o $@