2010-05-17 5 views
2

Я пытаюсь скомпилировать исходный код в Cygwin (в Windows 7) и получить следующее сообщение об ошибке при запуске файла гримПроблем compiliing C++ кода с помощью Cygwin

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 доступен и varaiables, что он говорит, не были заявлены в этой области не дают ошибку при компиляции файла на свой собственный

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

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

+1

Может быть, из-за столкновения имен, например, на win 'fcntl.h' и' Fcntl.h' указывают на те же файлы и (я не думаю, что это так, но stil ...) фактически включая тот же файл - проверьте настройки включенных каталогов. –

ответ

1

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

+0

Ты в цель. FAT32 и NTFS сохраняются в памяти, но не чувствительны к регистру. Таким образом, вы не можете иметь Makefile и makefile в том же каталоге, поскольку они будут считаться неоднозначными. Или, в этом случае, при поиске «Fcntl.h» он находит систему так же, как и поиск . Вы захотите переименовать Fcntl.h в исходный каталог myFcntl.h и соответствующим образом настройте его. (Оставьте систему только fcntl.h.) –

1

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

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

  • Нет связанных вопросов^_^