- 컴파일 오류
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h(222) : error C2146: 구문 오류 : ‘;’이(가) ‘PVOID64’ 식별자 앞에 없습니다.
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h(222) : error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h(5940) : error C2146: 구문 오류 : ‘;’이(가) ‘Buffer’ 식별자 앞에 없습니다.
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h(5940) : error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.
1>c:\program files\microsoft visual studio 8\vc\platformsdk\include\winnt.h(5940) : error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.
재현이 귀찮아서 [여기]에서 가져왔긴 하지만… 대략 이런 류의 오류를 만났다.
결국… 컴파일러가 제대로 된 버전의 BaseTsd.h를 찾지 못하고 엉뚱한 것을(아마도 64비트를 고려하지 않던 시절의 오래된 버전) 포함시킨게 원인일 것입니다. 또는 포함된 winnt.h 자체(또는 그것이 포함하는 어떤 헤더파일)가 예전 버전이어서 궁극적으로 BaseTsd.h를 포함하지 않은 것일 수도 있겠구요.
링크에 있는 댓글 중 하나인데, SDK에 나사가 빠진 부분이 있다고 한다. 해결법은 링크한 사이트에도 있듯이 관리자 권한을 가진 텍스트 편집기로 winnt.h 파일을 아래와 같이 수정하면 된다.
1 2 3 4 5 6 |
// // Void // typedef void *PVOID; typedef void * POINTER_64 PVOID64; |
winnt.h 의 341번줄 근처에서 위와 같이 있는 코드를…
1 2 3 4 5 6 7 8 9 |
// // Void // #ifndef POINTER_64 #define POINTER_64 #endif typedef void *PVOID; typedef void * POINTER_64 PVOID64; |
위와 같이 바꿔주면 된다.
- 링크 오류
[여기] 참고. 프로젝트의 링커 옵션에서 “특정 라이브러리 무시”에 “libci.lib”를 추가하면 된다. 해결이 되었고 아직까지는 에러를 만나지 않았음.