代码之家  ›  专栏  ›  技术社区  ›  Otto von Bisquick

g++找不到ncurses。h,尽管已安装

  •  2
  • Otto von Bisquick  · 技术社区  · 8 年前

    我第一次尝试在ncurses中进行实验,但在编译源代码时遇到了问题。据我所知,ncurses已安装并位于正确的目录中。

    我的makefile非常简单:

    .cpp :
        g++ -Wall -g -o $* $*.cpp -std=c++11 -lncurses
    

    这是我尝试 locate ncurses.h

    $ locate ncurses.h
    /usr/include/ncursesw/ncurses.h
    

    $ dpkg -l | grep ncurses
    ii  libncurses5:amd64                                     5.9+20140118-1ubuntu1                               amd64        shared libraries for terminal handling
    ii  libncursesw5:amd64                                    5.9+20140118-1ubuntu1                               amd64        shared libraries for terminal handling (wide character support)
    ii  libncursesw5-dev:amd64                                5.9+20140118-1ubuntu1                               amd64        developer's libraries for ncursesw
    ii  mtr-tiny                                              0.85-2                                              amd64        Full screen ncurses traceroute tool
    ii  ncurses-base                                          5.9+20140118-1ubuntu1                               all          basic terminal type definitions
    ii  ncurses-bin                                           5.9+20140118-1ubuntu1                               amd64        terminal-related programs and man pages
    ii  ncurses-term                                          5.9+20140118-1ubuntu1                               all          additional terminal type definitions
    

    但当我尝试

    bankacct.cpp:18:29: fatal error: ncurses.h: No such file or directory
    compilation terminated.
    


    我试过包括 <ncursesw/ncurses.h> 基于其他用户的建议,但现在g++给了我这个错误:

    $ make bankacct
    g++ -Wall -g -o bankacct bankacct.cpp -std=c++11 -lncurses
    /usr/bin/ld: cannot find -lncurses
    

    如果我尝试删除 -lncurses 它给了我这个:

    $ make bankacct
    g++ -Wall -g -o bankacct bankacct.cpp -std=c++11
    /tmp/cc8rPQfK.o: In function `main':
    bankacct.cpp:23: undefined reference to `initscr'
    

    现在我已经尝试链接这些库。以下是我所做的:

    $ locate libncurse
    /lib/x86_64-linux-gnu/libncurses.so.5
    /lib/x86_64-linux-gnu/libncurses.so.5.9
    /lib/x86_64-linux-gnu/libncursesw.so.5
    /lib/x86_64-linux-gnu/libncursesw.so.5.9
    /usr/lib/x86_64-linux-gnu/libncurses++w.a
    /usr/lib/x86_64-linux-gnu/libncursesw.a
    /usr/lib/x86_64-linux-gnu/libncursesw.so
    /usr/share/doc/libncurses5
    /usr/share/doc/libncursesw5
    /usr/share/doc/libncursesw5-dev
    /var/lib/dpkg/info/libncurses5:amd64.list
    /var/lib/dpkg/info/libncurses5:amd64.md5sums
    /var/lib/dpkg/info/libncurses5:amd64.postinst
    /var/lib/dpkg/info/libncurses5:amd64.postrm
    /var/lib/dpkg/info/libncurses5:amd64.shlibs
    /var/lib/dpkg/info/libncurses5:amd64.symbols
    /var/lib/dpkg/info/libncursesw5-dev:amd64.list
    /var/lib/dpkg/info/libncursesw5-dev:amd64.md5sums
    /var/lib/dpkg/info/libncursesw5-dev:amd64.postinst
    /var/lib/dpkg/info/libncursesw5:amd64.list
    /var/lib/dpkg/info/libncursesw5:amd64.md5sums
    /var/lib/dpkg/info/libncursesw5:amd64.postinst
    /var/lib/dpkg/info/libncursesw5:amd64.postrm
    /var/lib/dpkg/info/libncursesw5:amd64.shlibs
    /var/lib/dpkg/info/libncursesw5:amd64.symbols
    

    因此,我尝试了两种makefile变体:

    g++ -Wall -g -L/usr/lib/x86_64-linux-gnu/ -o $* $*.cpp -std=c++11 -lncurses
    

    g++ -Wall -g -L/lib/x86_64-linux-gnu/ -o $* $*.cpp -std=c++11 -lncurses
    

    这仍然给了我错误 undefined reference to 'initscr' (无 -Incurses公司 )或 /usr/bin/ld: cannot find -lncurses (有了它)

    1 回复  |  直到 5 年前
        1
  •  5
  •   kfsone    8 年前
    -lncurses
    

    告诉链接器查找名为“ncurses”的库。您明确指出,这不是您的库的名称:

    /usr/lib/x86_64-linux-gnu/libncursesw.a
    

    你需要

    -lncursesw
    

    您不需要修改源代码来指定 <ncursesw/ncurses.h> 您可以简单地添加

    -I/usr/include/ncursesw