2016-05-15 3 views
0

У меня есть программа, написанная на C, которая использует execvpe (3) функцию, и у меня есть строка набор включает необходимый заголовочный файл:предупреждений компилятора для функции execvpe

#include <unistd.h> 

Я скомпилировать этот файл с помощью следующей команды ...

gcc foo.c -o foo 

... только, чтобы получить следующее предупреждение:

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

Я encount аналогичное поведение с файлами, ссылающимися на функцию pthread_create (3). Разница, очевидно, в том, что в то время как на странице руководства pthread_create (3) четко указано, что нужно «Компилировать и связывать с -pthread», на странице руководства для семейства функций exec (3) нет таких инструкций. Кроме того, я не могу найти ссылки в руководстве или в Интернете на аналогичный флаг компилятора для семейства exec (3).

Буду признателен за любую информацию, имеющуюся у вас по этому вопросу. Если есть некоторый флаг, который я должен использовать во время компиляции, или если я полностью ищу место для решения, сообщите мне.

ответ

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[]); 

который удовлетворит компилятор, но если вы затем получить ошибка компоновщика, тогда функция просто не включается в библиотеку в любом случае.

+0

Я знаю, что это помечено gcc, но в MSVC функция находится в '' –

+0

@WeatherVane: Я предположил, что это было glibc из-за использования unistd.h. OP вполне может добавить тег для уточнения. – Clifford

Смежные вопросы