2016-09-16 128 views
1

我想在ncurses中第一次尝试,但我在编译我的源代码时遇到问题。据我所知,ncurses被安装并在正确的目录中。g ++找不到ncurses.h尽管它正在安装

我的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 

但g ++告诉我这个,当我试着制作

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

不幸的是,我没有root权限,我需要能够在这台机器上编译。我有什么选择?


我试过,包括<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'(不-lncurses)或/usr/bin/ld: cannot find -lncurses (with it)

+1

你是否在你的源代码中包含头文件像'#include '? –

+0

我试过'#include '和'#include ',g ++告诉我'ncurses.h:没有这样的文件或目录。我现在的整个程序基本上只是'#include ' –

+1

w在'/ usr/include/ncursesw /'旁边做了什么? – Flint

回答

2
-lncurses 

告诉链接器寻找名为“ncurses”的库。你清楚地表明,这不是你的库称为:

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

你需要

-lncursesw 

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

-I/usr/include/ncursesw 
相关问题