我有一个通常正常编译的应用程序。它使用两个"非标准"函数(如果我没有弄错的话,都在cstdlib中):sleep()和守护进程()。在更新我的系统后,我发现我的程序将不再编译(它仍然在我的旧系统上编译)。 GCC给了我这样的信息:
error: 'daemon' was not declared in this scope
error: 'sleep' was not declared in this scope
我记得曾经有过一次与sleep()有同样的问题,并且包括cstdlib解决了这个问题。我找不到cstdlib的更改日志,也不知道函数的移动位置(如果没有删除)。我也假设daemon()发生了同样的事情。我在谷歌找不到与此相关的任何内容。
有没有人知道这些去了哪里,或者更好地了解我将来可以找到的地方,以防再次遇到这个问题?
我知道daemon()是一种懒惰的做事方式,并且可以自己编写一个正确的方法来守护这个程序(使用fork等),但是使用它非常方便。
答案 0 :(得分:8)
sleep
和daemon
都不是C标准库(cstdlib)的一部分。 sleep
是unistd.h
中定义的POSIX.1-2001函数,daemon
是非POSIX函数,也可以在linux上的unistd.h
中使用。
作为非标准功能,您可能需要在_GNU_SOURCE
之前定义#include <unistd.h>
才能获得daemon
的定义。
答案 1 :(得分:3)
Linux手册页通常包含大多数函数所需的头文件试试
man daemon
或
man 3 sleep
这两个可能都说你需要#include <unistd.h>