2016-09-16 123 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 
相關問題