我正在尝试编译包含对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/