gcc/usr/bin/ld:错误:找不到-lncurses

Yrr*_*j10 31 c linux ubuntu gcc ncurses

我正在运行Ubuntu 12.04,我目前正在开发一个涉及C,OpenGL,茶壶和输入法的项目.

当我决定使用箭头键作为输入时,问题就出现了.我检查了箭头键的键代码,但所有箭头都返回0.我查找了如何使这个工作,我找到了conio.h.不幸的是,它是一个旧的DOS标头,不适用于Linux.然后我找到了一个名为ncurses的替代品.

安装必要的库后,按照构建说明,我在main.c源代码中使用#included curses.h.当我第一次尝试使用gcc编译时,我收到以下错误:

main.o:main.c:function _Key: error: undefined reference to 'stdscr'
main.o:main.c:function _Key: error: undefined reference to 'wgetch'
main.o:main.c:function _Key: error: undefined reference to 'stdscr'
main.o:main.c:function _Key: error: undefined reference to 'wgetch'
Run Code Online (Sandbox Code Playgroud)

我通过将-lncurses添加到makefile中找到了修复,如下所示:

SOURCES=main.c

main: main.o
    gcc -lm -lGL -lGLU -lglut -lncurses main.o -o main

main.o: main.c
    gcc -lm -lGL -lGLU -lglut -c main.c
Run Code Online (Sandbox Code Playgroud)

但是另一个错误让我受到了欢迎:

/usr/bin/ld: error: cannot find -lncurses
Run Code Online (Sandbox Code Playgroud)

以及以前的错误.

我花了最近两天的时间搜索Ubuntu论坛和StackOverFlow.任何帮助,将不胜感激.

PS我不知道这是否重要但是当我尝试运行/ usr/bin/ld时出现此错误:

ld: fatal error: no input files
Run Code Online (Sandbox Code Playgroud)

Dal*_*ale 46

对于遇到同样问题的人:我错过了32位库; 我在64位服务器上编译了32位,缺少lib32ncurses5-dev软件包.

在Ubuntu上我只是跑了:

sudo apt-get install lib32ncurses5-dev
Run Code Online (Sandbox Code Playgroud)

  • 我无法通过pip,python 2.7安装gnureadline,这解决了我的问题. (9认同)

Som*_*ude 2

首先,链接时应将库放在目标文件之后。并且在源文件的编译中根本没有它们。

之后,如果 ncurses 未安装在标准搜索文件夹中,您需要向链接器指出它的位置,这是通过-L命令行选项完成的:

gcc main.o -o main -L/location/of/ncurses -lm -lGL -lGLU -lglut -lncurses
Run Code Online (Sandbox Code Playgroud)