为了使用UNIX库punction clear()我需要什么头

时间:2015-12-11 09:00:58

标签: c unix curses

当我注意到以下内容时,我正在编译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>

谢谢!

2 个答案:

答案 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页面)