2012-04-03 3 views
3

VisualStudio 2005에서 Qt 4.8.1을 빌드하고 있는데 컴파일러에서 찾을 수없는 문제가 발생했습니다 _fileno.Qt, windows 및 _POSIX_

은 몇 가지 조사 후, 나는 STDIO.H에 내가 다음 Qt는 코드를 통해 보았다

#ifdef _POSIX_ 
_CRTIMP __checkReturn int __cdecl fileno(__in FILE * _File); 
#else 
_CRTIMP __checkReturn int __cdecl _fileno(__in FILE * _File); 
#endif 

가 있음을 발견하고 그 qfsfilengine_win.cpp을 발견하고 qfilesystemengine_win.cpp 모두

#define _POSIX_ 

이 이것이 저의 실수 인 것처럼 보입니다.이 줄을 제거하면 성공적으로 구축 된 것처럼 보입니다.

누구도이 파일들이 _POSIX_을 정의하는 이유를 알고 있습니까?

감사합니다.

+1

오랜 시간 동안 posix 이름이 사용되지 않으므로 실수가 아닙니다. 이 파일들은 * 정의 *'_POSIX_'를 정의하지 않습니다. Qt가 문제를 해결하려고하는 것처럼 보입니다. 컴파일러 헤더 파일을 편집하지 않으면 정말로 깊은 구멍을 파십시오. –

+1

qfsfilengine_win.cpp 및 qfilesystemengine_win.cpp 모두에 #define _POSIX _이 (가) 있습니다. stdio.h # if 그것,하지만 내 질문에 대한 잘못된 #define 것 Qt cpp 파일에 대한 것입니다. – Liron

+1

글쎄, 그것은 Windows에서 기술적으로 올바르지 않지만, 여러 플랫폼과 컴파일러를 지원해야 할 때 라이브러리가 사용하는 일종의 해킹입니다. 당신은 XY 질문을하고 있습니다. 당신은 Y가 문제라고 가정하지만 실제 문제는 아닌 것 같습니다. 우리는 X가 어떻게 생겼는지 전혀 모른다. '_fileno' 대신에'fileno'를 사용하고자한다면 QSomething 클래스를 사용하지 않는 것이 좋습니다. –

답변

1

이것은 실제로 Qt의 버그 일 것 같습니다. 미리 컴파일 된 헤더없이 Windows 용 Qt를 빌드하고이 문제가 발생하면 qfsfilengine_win.cpp 및 qfilesystemengine_win.cpp에서 #define _POSIX_ 호출을 삭제하면 성공적으로 빌드됩니다.