我运行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'
我找到了解决加入-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
但我迎接另一个错误:
/usr/bin/ld: error: cannot find -lncurses
还有以前的错误。
我花了最后2天搜索两个Ubuntu论坛和计算器。 任何帮助,将不胜感激。
PS我不知道这是很重要的,但是当我尝试运行/ usr / bin中/ LD我得到这个错误:
ld: fatal error: no input files
对于同样的问题,我没有任何人:我是缺少32个库; 我被编译其缺少lib32ncurses5-dev软件包64位服务器在32位。
在Ubuntu上我只是跑:
sudo apt-get install lib32ncurses5-dev
首先,你应该链接时把库中的目标文件后 。 而不是让他们在所有的源文件的汇编。
在此之后,如果ncurses的不是安装在标准的搜索文件夹,你需要指出的地方是,这与做链接-L
命令行选项:
gcc main.o -o main -L/location/of/ncurses -lm -lGL -lGLU -lglut -lncurses
尝试安装ncurses-static
包也一样,如果你只有ncurses-devel
安装在你的Ubuntu操作系统软件包。
如果解决您的问题,再加上如果添加@约阿希姆的编辑指令,你有了一个很好的开始。
gcc main.o -o main -L/location/of/ncurses -lm -lGL -lGLU -lglut -lncurses
链接器无法找到共享库在它的搜索路径。 如果添加了目录,你的共享库是将LD_LIBRARY_PATH
环境变量的链接应该找到它,并能够针对其链接。 在这种情况下,你可以省略-L
选项GCC:
gcc main.o -o main -lm -lGL -lGLU -lglut -lncurses
它应该编译罚款。
编辑:好的知道apt-get install libncurses5-dev
解决您的问题。
仅供参考。 在LD_LIBRARY_PATH
环境变量包含的路径,冒号分隔列表链接器在运行时使用,以解决库的依赖。 这些路径将在标准库路径优先/lib
和/usr/lib
。 该标准的路径依然会被搜索,但只在路径列表后LD_LIBRARY_PATH
已用完。
用最好的方式LD_LIBRARY_PATH
立即执行程序之前设置它的命令行或脚本上。 这样,您就可以保持新LD_LIBRARY_PATH
从系统的其余部分隔离,即本地运行的外壳程序实例当前运行。
$ export LD_LIBRARY_PATH="/path/to/libncurses/library/directory/:$LD_LIBRARY_PATH"
$ gcc main.o -o main -lm -lGL -lGLU -lglut -lncurses