尽管已安装 g++ 仍找不到 ncurses.h

Ott*_*ick 2 c++ gcc ncurses linker-errors

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

我的 makefile 非常简单:

.cpp :
    g++ -Wall -g -o $* $*.cpp -std=c++11 -lncurses
Run Code Online (Sandbox Code Playgroud)

这是我尝试时的输出 locate ncurses.h

$ locate ncurses.h
/usr/include/ncursesw/ncurses.h
Run Code Online (Sandbox Code Playgroud)

当我检查它是否已安装时

$ 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
Run Code Online (Sandbox Code Playgroud)

但是当我尝试制作时 g++ 告诉我这个

bankacct.cpp:18:29: fatal error: ncurses.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

不幸的是,我没有 root 访问权限,我需要能够在这台机器上进行编译。我有哪些选择?


我已经尝试<ncursesw/ncurses.h>根据其他用户的建议包括在内,但现在 g++ 给了我这个错误:

$ make bankacct
g++ -Wall -g -o bankacct bankacct.cpp -std=c++11 -lncurses
/usr/bin/ld: cannot find -lncurses
Run Code Online (Sandbox Code Playgroud)

如果我尝试删除-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'
Run Code Online (Sandbox Code Playgroud)

现在我尝试链接库。这是我所做的:

$ 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
Run Code Online (Sandbox Code Playgroud)

然后我尝试了我的 makefile 的两种变体:

g++ -Wall -g -L/usr/lib/x86_64-linux-gnu/ -o $* $*.cpp -std=c++11 -lncurses
Run Code Online (Sandbox Code Playgroud)

g++ -Wall -g -L/lib/x86_64-linux-gnu/ -o $* $*.cpp -std=c++11 -lncurses
Run Code Online (Sandbox Code Playgroud)

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

kfs*_*one 5

-lncurses
Run Code Online (Sandbox Code Playgroud)

告诉链接器查找名为“ncurses”的库。您清楚地表明这不是您的图书馆所称的:

/usr/lib/x86_64-linux-gnu/libncursesw.a
Run Code Online (Sandbox Code Playgroud)

你需要

-lncursesw
Run Code Online (Sandbox Code Playgroud)

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

-I/usr/include/ncursesw
Run Code Online (Sandbox Code Playgroud)