Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 

Visual C++ - error C1083: Cannot open include file: 'float.h': No such file or directory

"Platform Toolset"이 "Visual Studio 2017 - Windows XP (v141_xp)"로 설정된 Visual C++ 프로젝트를,

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
}

최근의 신규 Toolset으로 변경해 빌드하면 이런 오류가 발생합니다.

["Visual Studio 2017 (v141)"인 경우]
fatal error C1083: Cannot open include file: 'corecrt.h': No such file or directory

["Visual Studio 2019 (v142)" 또는 "Visual Studio 2022 (v143)"인 경우]
error C1083: Cannot open include file: 'float.h': No such file or directory

왜냐하면 "Platform Toolset"과 함께 "Windows SDK Version"도 변경해야 하기 때문입니다. 아마도 "v141_xp"인 경우 Windows SDK Version이 "7.0"으로 설정돼 있을 텐데요, 이것을 "10.0 (latest installed version)" 등으로 변경하면 됩니다.




XP용 빌드의 경우, "Windows.h"를 포함하면,

// Visual Studio 2022 + "Visual Studio 2017 - Windows XP (v141_xp)" + "Multi-threaded (/MT)" 설정으로 빌드

#include <iostream>
#include <Windows.h>

int main()
{
    std::cout << "Hello World!\n";
}

이런 컴파일 오류가 발생합니다.

error C2760: syntax error: unexpected token 'identifier', expected 'type specifier'

IUnknown을 사용하는 코드인데요,

extern "C++"
{
    template<typename T> void** IID_PPV_ARGS_Helper(T** pp) 
    {
        static_cast<IUnknown*>(*pp);    // make sure everyone derives from IUnknown
        return reinterpret_cast<void**>(pp);
    }
}

"Conformance mode"를 "No"로 설정하면 됩니다.

objbase.h error when compiling with /permissive- and v141_xp platform toolset
; https://developercommunity.visualstudio.com/t/objbaseh-error-when-compiling-with-permissive-and/174539

혹은, 헤더 파일 포함 전에 typedef로 명시해도 되는데요,

typedef struct IUnknown IUnknown;

#include <iostream>
#include <Windows.h>

그런데 재미있는 건, 저 코드가 어떤 C++ 표준과 관련이 있는 것인지 잘 모르겠습니다. 가령, 저 오류가 발생하는 코드를 유사하게 작성해서 재현해 보려고 했지만,

// Visual Studio 2022 + "Visual Studio 2017 - Windows XP (v141_xp)" + "Multi-threaded (/MT)" 설정으로 빌드

#define DECLSPEC_NOVTABLE_X __declspec(novtable)
#define DECLSPEC_UUID_X(x) __declspec(uuid(x))
#define MIDL_INTERFACE_X(x)   struct DECLSPEC_UUID_X(x) DECLSPEC_NOVTABLE_X
#define EXTERN_C    extern "C"

#ifndef DEFINE_GUID
typedef struct _GUID {
    unsigned long  Data1;
    unsigned short Data2;
    unsigned short Data3;
    unsigned char  Data4[8];
} GUID;
#endif

typedef GUID IID;

EXTERN_C const IID IID_IUnknown2;
extern "C++"
{
    MIDL_INTERFACE_X("F0FF0FF1-3E61-49FA-AF56-AEA18F4D74B7")
        IUnknown2
    {
    public:
        virtual void Release(void) = 0;
    };
}

MIDL_INTERFACE_X("0AEF294D-14E9-4ED1-BAF0-8609F6B3D157")
Test : public IUnknown2
{
    virtual void Release(void) = 0;
};

template<typename T> void** TEST_Helper(T** pp)
{
    static_cast<IUnknown2*>(*pp);
    return reinterpret_cast<void**>(pp);
}

#define IID_PPV_TEST(ppType) __uuidof(**(ppType)), TEST_Helper(ppType)

int main()
{
    Test* t;

    IID_PPV_TEST(&t);
}

컴파일이 잘됩니다. ^^; 혹시 저 문제의 C++ 표준이 무엇인지 아시는 분은 덧글 부탁드립니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 8/27/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2024-09-03 11시19분
호오 신기하네요 .한번 추적해볼까
JunSeo Lee
2024-09-03 06시53분
호오 기대되네요. ^^
정성태

... 121  122  123  124  125  126  127  128  129  130  [131]  132  133  134  135  ...
NoWriterDateCnt.TitleFile(s)
2871정성태2/24/201528713개발 환경 구성: 258. 윈도우 8.1에서 방화벽과 함께 FTP 서버 여는 (하지만, 권장하지 않는) 방법 [1]
2870정성태2/24/201530306개발 환경 구성: 257. 윈도우 8.1에서 방화벽과 함께 FTP 서버 여는 방법
2869정성태2/23/201523607.NET Framework: 500. struct로 정의한 값 형식(Value Type)의 경우 Equals 재정의를 권장합니다.파일 다운로드1
2868정성태2/23/201528749VS.NET IDE: 97. Visual C++ 프로젝트 디버깅 시에 Step-Into(F11) 동작이 원치 않는 함수로 진입하는 것을 막는 방법 [2]
2867정성태2/23/201522228오류 유형: 273. File History - Failed to initiate user data backup (error 80070005)
2866정성태2/23/201524195오류 유형: 272. WAT080 : Failed to locate the Windows Azure SDK. Please make sure the Windows Azure SDK v2.1 is installed.
1868정성태2/20/201520976오류 유형: 271. The type '...' cannot be used as type parameter 'TContext' in the generic type or method 'System.ServiceModel.DomainServices.EntityFramework.LinqToEntitiesDomainService&lt;T&gt;
1866정성태2/20/201522200오류 유형: 270. "aspnet_regiis -i" 실행 시 0x00000006 오류 해결 방법
1865정성태2/20/201523577.NET Framework: 499. 특정 닷넷 프레임워크 버전 이후부터 제공되는 타입을 사용해야 한다면?
1864정성태2/18/201528509.NET Framework: 498. C#으로 간단하게 만들어 본 ASCII Art 프로그램 [2]파일 다운로드1
1862정성태2/18/201532662.NET Framework: 497. .NET Garbage Collection에 대한 정리 [6]
1861정성태2/18/201527800.NET Framework: 496. 마우스 커서가 놓인 지점의 문자열 얻는 방법 [1]파일 다운로드1
1860정성태2/18/201528095.NET Framework: 495. CorElementType의 요소 값 설명파일 다운로드1
1859정성태2/17/201528697Windows: 106. 컴퓨터를 재부팅하면 절전(Power Saver) 전원 모드로 돌아가는 경우
1858정성태2/16/201538353Windows: 105. 자동으로 로그아웃/잠김 화면 상태로 전환된다면? [2]
1857정성태2/16/201526112.NET Framework: 494. 값(struct) 형식의 제네릭(Generic) 타입이 박싱되는 경우의 메타데이터 토큰 값파일 다운로드1
1856정성태2/15/201524715.NET Framework: 493. TypeRef 메타테이블에 등록되는 타입의 조건파일 다운로드1
1855정성태2/10/201524162개발 환경 구성: 256. WebDAV Redirector - Sysinternals 폴더 연결 시 "The network path was not found" 오류 해결 방법
1854정성태2/10/201525182Windows: 104. 폴더는 삭제할 수 없지만, 그 하위 폴더/파일은 생성/삭제/변경하는 보안 설정
1853정성태2/6/201555994웹: 29. 여신금융협회 웹 사이트의 "Netscape 6.0은 지원하지 않습니다." 오류 메시지 [5]
1852정성태2/5/201526790.NET Framework: 492. .NET CLR Memory 성능 카운터의 의미파일 다운로드1
1851정성태2/5/201528265VC++: 88. 하룻밤의 꿈 - 인텔 하스웰의 TSX Instruction 지원 [3]
1850정성태2/4/201548116Windows: 103. 작업 관리자에서의 "Commit size"가 가리키는 메모리의 의미 [4]
1849정성태2/4/201526913기타: 51. DropBox의 CPU 100% 현상 [1]파일 다운로드1
1848정성태2/4/201523243.NET Framework: 491. 닷넷 Generic 타입의 메타 데이터 토큰 값 알아내는 방법 [2]
1847정성태2/3/201526395기타: 50. C# - 윈도우에서 dropbox 동기화 폴더 경로 및 종료하는 방법
... 121  122  123  124  125  126  127  128  129  130  [131]  132  133  134  135  ...