2016-09-16 3 views
1

Ich versuche in ncurses zum ersten Mal zu experimentieren, aber ich habe Probleme beim Kompilieren meines Quellcodes. Soweit ich das beurteilen kann, ist Ncurses installiert und in den richtigen Verzeichnissen.g ++ kann ncurses.h nicht finden, obwohl es installiert ist

Mein Make-Datei ist super einfach:

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

und hier ist meine Ausgabe, wenn ich versuche zu locate ncurses.h

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

und wenn ich überprüfen, um zu sehen, ob es

$ 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 

installiert ist aber g ++ sagt mir das, wenn ich versuche,

zu machen

Leider habe ich keinen Root-Zugang und muss auf diesem Rechner kompilieren können. Was sind meine Möglichkeiten?


Ich habe versucht, einschließlich <ncursesw/ncurses.h> auf Anregungen von anderen Benutzern, aber g jetzt ++ wird mir diesen Fehler geben:

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

und wenn ich -lncurses versuchen zu entfernen es gibt mir diese:

$ 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' 

Jetzt habe ich versucht, die Bibliotheken zu verknüpfen. Hier ist, was ich getan habe:

$ 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 

So dann habe ich versucht, zwei Variationen meiner Make-Datei:

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

und

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

, die gab mir noch die Fehler undefined reference to 'initscr' (ohne -lncurses) oder /usr/bin/ld: cannot find -lncurses (mit ihm)

+1

hinzufügen Fügen Sie den Header wie '#include ' in Ihren Quellcode ein? –

+0

Ich habe versucht, beide '#include ' und '# include ' und g ++ sagt mir 'ncurses.h: keine solche Datei oder Verzeichnis'. Mein gesamtes Programm ab jetzt ist im Wesentlichen nur '#include ' –

+1

was ist das, was neben '/ usr/include/ncursesw /'? – Flint

Antwort

2
-lncurses 

weist den Linker an, nach einer Bibliothek namens "ncurses." Zu suchen. Sie zeigen klar, das ist nicht das, was die Bibliothek aufgerufen wird:

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

Sie benötigen

-lncursesw 

Sie brauchen nicht den Quellcode zu modifizieren <ncursesw/ncurses.h> geben Sie einfach

-I/usr/include/ncursesw 
Verwandte Themen