[英]C: Implicit declaration of function ‘vsyslog’
I am trying to implement a sys logger for my pam module. 我正在尝试为我的pam模块实现sys logger。 My code is as follows: 我的代码如下:
#define __USE_BSD
#include <syslog.h>
#include <stdarg.h>
#include <string.h>
static void _log(int level, const char *format, ...) {
va_list args;
va_start(args, format);
openlog("my_app", LOG_CONS|LOG_PID|LOG_PERROR, LOG_AUTH);
vsyslog(level, format, args);
va_end(args);
closelog();
}
PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh,
int flags,int argc, const char **argv ) {
/* Something... */
_log(LOG_INFO, "username check");
if (strcmp(username, "jdoe") != 0) {
_log(LOG_ERR, "Auth error");
return PAM_IGNORE;
}
/* Something else... *
}
But, when I compile, Eclipse CDT returns me a warning: 但是,当我编译时,Eclipse CDT向我返回警告:
../src/mypam.c:33:5: warning: implicit declaration of function ‘vsyslog’ [-Wimplicit-function-declaration]
How could I fix it? 我该如何解决? Note that I am using CentOS 7 as dev machine. 请注意,我将CentOS 7用作开发机。
Fixed, by defining both __USE_BSD
and _BSD_SOURCE
as follows: 通过定义__USE_BSD
和_BSD_SOURCE
,如下所示:
#define __USE_BSD
#define _BSD_SOURCE
#include <syslog.h>
#include <stdarg.h>
// ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.