execvpe函数的编译器警告

时间:2016-05-15 18:04:22

标签: c gcc exec compiler-warnings

我有一个用c编写的程序,它使用了execvpe(3)函数,我有一个行设置包含必需的头文件:

#include <unistd.h>

我使用以下命令编译此文件...

gcc foo.c -o foo

...只是为了得到以下警告:

warning: implicit declaration of function ‘execvpe’ [-Wimplicit-function-declaration]

我遇到了与引用pthread_create(3)函数的文件类似的行为。显然不同之处在于pthread_create(3)手册页清楚地表明一个人应该&#34;编译并与-pthread&#34;链接,exec(3)函数族的手册页没有任何这样的指令。此外,我在手册或在线中找不到exec(3)系列的类似编译器标志的任何参考。

我很感激您对此事的任何信息。如果有一些标志我应该在编译时使用,或者如果我正在寻找完全错误的解决方案,请告诉我。

1 个答案:

答案 0 :(得分:1)

手册页here指出有必要定义_GNU_SOURCE特征测试宏以启用函数声明:

#define _GNU_SOURCE
#include <unistd.h>

有趣的是,同一手册页上的unistd.h链接会将您带到一个根本不会声明execvpe的实现。您可以检查系统的unistd.h文件以检查它是否已声明且依赖于_GNU_SOURCE - 即将来解决类似问题 - 检查标题内容以查看它是否存在甚至是什么可能依赖的宏。

如果它不在头文件中,那么它很可能也不在库中,但您可以检查如下:

#include <unistd.h>
extern int execvpe(const char *file, char *const argv[], char *const envp[]);

这将满足编译器的要求,但是如果你得到一个链接器错误,那么在任何情况下该函数都不会包含在库中。