我正在尝试编译包含对getresuid的调用的函数。但是,它将生成以下警告:

setuid.c:8:3: warning: implicit declaration of function 'getresuid' is invalid
in C99 [-Wimplicit-function-declaration]
getresuid(&ruid, &euid, &suid);
^

Undefined symbols for architecture x86_64:
"_getresuid", referenced from:
_main in setuid-ba46f8.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1

为什么出现链接器错误,指出未为体系结构x86_64找到符号?如何获得成功链接?

如果有帮助,我的原始代码是:
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main() {
    uid_t euid, ruid, suid;
    getresuid(&ruid, &euid, &suid);
    printf("EUID: %d, RUID: %d, SUID: %d\n", euid, ruid, suid);
    return 0;
}

我正在Mac OS X 10.10.2(Yosemite)上进行编译。

最佳答案

您需要在所有标题之前定义

#define _GNU_SOURCE

因为getresuid是GNU扩展功能。

关于c - c99中不赞成使用getresuid吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29888475/

10-16 13:31