C: 函数 ‘vsyslog’ 的隐式声明

标签 c eclipse syslog

我正在尝试为我的 pam 模块实现一个系统记录器。 我的代码如下:

#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... *

}

但是,当我编译时,Eclipse CDT 返回警告:

../src/mypam.c:33:5: warning: implicit declaration of function ‘vsyslog’ [-Wimplicit-function-declaration]

我该如何解决? 请注意,我使用 CentOS 7 作为开发机器。

最佳答案

已修复,通过定义 __USE_BSD_BSD_SOURCE 如下:

#define __USE_BSD
#define _BSD_SOURCE
#include <syslog.h>
#include <stdarg.h>

// ...

关于C: 函数 ‘vsyslog’ 的隐式声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31287916/

相关文章:

python - 在 Python 中读取和打印与 USB 相关的 var 日志消息

c - FFmpeg:av_parser_parse2 做什么?

java - 编译错误 - com.mysql.jdbc.Driver 无法解析为变量

eclipse - 将 PyDev 安装到 Eclipse

java - 如何在java项目中使用可运行的jar,将其导入libs文件夹

java - 是否有强大的 java.util.logging 系统日志处理程序实现?

c - 如果没有使用 openlog() 的网络,那么 syslog() 设施是什么

java.lang.UnsatisfiedLinkError - 运行 z/OS 应用程序时

c - 在 C 函数中声明 vector 时出错

c - calloc(10,4) 和 calloc(1,40) 有什么区别?