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

时间:2013-01-19 16:46:12

标签: c linux gcc ubuntu 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'

我通过在makefile中添加-lncurses来找到修复程序,如下所示:

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

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

/usr/bin/ld: error: cannot find -lncurses

以及之前的错误。

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

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

ld: fatal error: no input files

3 个答案:

答案 0 :(得分:45)

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

在Ubuntu上我只是跑了:

sudo apt-get install lib32ncurses5-dev

答案 1 :(得分:2)

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

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

gcc main.o -o main -L/location/of/ncurses -lm -lGL -lGLU -lglut -lncurses

答案 2 :(得分:1)

如果您的Ubuntu操作系统中只安装了ncurses-static软件包,请尝试安装ncurses-devel软件包。

如果这样可以解决您的问题,如果您添加@Joachim的编译说明,那么您将有一个良好的开端。

gcc main.o -o main -L/location/of/ncurses -lm -lGL -lGLU -lglut -lncurses

链接器无法在其搜索路径中找到您的共享库。如果将共享库所在的目录添加到LD_LIBRARY_PATH环境变量,链接器应该找到它并能够链接它。在这种情况下,您可以省略gcc的-L选项:

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

它应该编译得很好。

编辑: 很高兴知道apt-get install libncurses5-dev可以解决您的问题。

FYI。 LD_LIBRARY_PATH环境变量包含冒号分隔的路径列表,链接器在运行时使用这些路径来解析库依赖项。这些路径将优先于标准库路径/lib/usr/lib。仍将搜索标准路径,但仅在LD_LIBRARY_PATH中的路径列表用完后才会搜索。

使用LD_LIBRARY_PATH的最佳方法是在执行程序之前立即在命令行或脚本上设置它。这样,您可以将新的LD_LIBRARY_PATH与系统的其余部分隔离,即保持与当前正在运行的shell实例的本地隔离。

$ export LD_LIBRARY_PATH="/path/to/libncurses/library/directory/:$LD_LIBRARY_PATH"
$ gcc main.o -o main -lm -lGL -lGLU -lglut -lncurses