当我注意到以下内容时,我正在编译UNIX的源代码
warning: implicit declaration of function 'clear'
我在二进制文件上使用GDB进行调试后,出现了这些:
0x090000002a242594 in clear () from /usr/lib/libcurses.a(shr42_64.o)
0x090000002a242600 in wclear () from /usr/lib/libcurses.a(shr42_64.o)
0x090000002a238a80 in werase () from /usr/lib/libcurses.a(shr42_64.o)
0x090000002a238b00 in wmove () from /usr/lib/libcurses.a(shr42_64.o)
0x090000002a238a9c in werase () from /usr/lib/libcurses.a(shr42_64.o)
0x090000002a238600 in wclrtobot () from /usr/lib/libcurses.a(shr42_64.o)
0x090000002a237f80 in wclrtoeol () from /usr/lib/libcurses.a(shr42_64.o)
它似乎是某种UNIX库" libcurses.a"
我应该如何在我的文件中包含此库以消除该警告?
#include <stdlib.h>
#include <curses.h> // See it's here, stop the silly questions
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
谢谢!
答案 0 :(得分:1)
从显示shr42_64.o
的堆栈跟踪中,您的系统似乎是某个版本的AIX,例如,5.x。运行
ar tv /usr/lib/libcurses.a
会显示类似
的内容r--r--r-- 2/2 493219 Aug 05 05:38 2011 shr42.o
r--r--r-- 2/2 377211 Aug 05 05:38 2011 shr4.o
r--r--r-- 2/2 194484 Aug 05 05:38 2011 shr.o
相应的标头/usr/include/curses.h
包含clear()
ifdef&#39; d
#if defined(NOMACROS) || defined(lint)
#if defined(__STDC__) || !defined(_NO_PROTO)
和(假设您的编译器确实使用那个标头)后一行是使用的。根据{{1}}的评论,您似乎也在使用gdb
。通常gcc
会定义gcc
(虽然某些very old端口可能不会)。如果该定义没有问题,则可能会定义__STDC__
。或者,您的系统可能会有一些冲突的头文件。要解决是什么,我会生成预处理器输出文件(使用选项_NO_PROTO
,-E
和-P
作为documented)和看看哪个&#34; curses.h&#34;包含了文件,实际使用了ifdef。
答案 1 :(得分:0)
这个错误不是包含库,而是包含函数声明,这意味着你需要#include <curses.h>
。 (见man页面)