Проблемы компиляции кода C ++ с использованием Cygwin - PullRequest
3 голосов
/ 18 мая 2010

Я пытаюсь скомпилировать некоторый исходный код в cygwin (в windows 7) и получить следующую ошибку при запуске файла make

g++ -DHAVE_CONFIG_H -I. -I..  -I..  -Wall -Wextra -Werror -g -O2 -MT libcommon_a  Fcntl.o -MD -MP -MF .deps/libcommon_a-Fcntl.Tpo -c -o libcommon_a-Fcntl.o `test -f 'Fcntl.cpp' || echo './'`Fcntl.cpp
Fcntl.cpp: In function int setCloexec(int):
Fcntl.cpp:8: error: 'F_GETFD' was not declared in this scope
Fcntl.cpp:8: error: 'fcntl' was not declared in this scope
Fcntl.cpp:11: error: 'FD_CLOEXEC' was not declared in this scope
Fcntl.cpp:12: error: 'F_SETFD' was not declared in this scope
make[4]: *** [libcommon_a-Fcntl.o] Error 1
make[4]: Leaving directory `/abyss-1.1.2/Common'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/abyss-1.1.2'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/abyss-1.1.2'
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/cygdrive/c/Users/Martin/Documents/NetBeansProjects/abyss-1.1.2_1'
make: *** [.build-impl] Error 2

Файл проблемы: -

#include "Fcntl.h"
#include <fcntl.h>


/* Set the FD_CLOEXEC flag of the specified file descriptor. */
int setCloexec(int fd)
{
 int flags = fcntl(fd, F_GETFD, 0);
 if (flags == -1)
  return -1;
 flags |= FD_CLOEXEC;
 return fcntl(fd, F_SETFD, flags);
}

Я не понимаю, что происходит, файл fcntl.h доступен, и переменные, которые, как он говорит, не были объявлены в этой области, не выдают ошибку, когда я сам компилирую файл

Любая помощь будет высоко ценится

Большое спасибо

Ответы [ 2 ]

1 голос
/ 18 мая 2010

Что случилось с этими #include утверждениями? Кажется, в вашем проекте есть заголовочный файл с именем Fcntl.h, это так? Есть ли в нем охрана? Если это так, возможно, вы случайно используете ту же защиту, что и встроенный заголовок, и в результате не получаете его содержимое. Cygwin обычно работает в нечувствительной к регистру файловой системе, поэтому даже присвоение этим заголовкам похожих имен, вероятно, опасно.

1 голос
/ 18 мая 2010

Я не собирал вещи с Cygwin, так что это может быть неосновно, но, учитывая, что вы строите на Windows, которая имеет файловую систему без учета регистра, вы уверены, что компилятор может определить разницу между вашим заголовок Fcntl.h и системный заголовок fcntl.h? Это может быть просто включение вашего заголовка дважды и никогда не получение системного заголовка.

...