execvpe函数的编译器警告

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

#include  

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

 gcc foo.c -o foo 

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

 warning: implicit declaration of function 'execvpe' [-Wimplicit-function-declaration] 

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

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

此处的手册页指出有必要定义_GNU_SOURCEfunction测试宏以启用函数声明:

 #define _GNU_SOURCE #include  

有趣的是,在同一手册页上指向unistd.h的链接将带您进入一个根本不声明execvpe的实现。 您可以检查系统的unistd.h文件以检查它是否已声明且依赖于_GNU_SOURCE – 即将来解决类似问题 – 检查标头内容以查看它是否存在以及它可能依赖于哪些宏上。

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

 #include  extern int execvpe(const char *file, char *const argv[], char *const envp[]); 

这将满足编译器,但如果你然后得到一个链接器错误,那么在任何情况下该函数根本不包含在库中。