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분
호오 기대되네요. ^^
정성태

... 151  152  153  154  155  156  157  158  159  [160]  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1048정성태5/27/201132240개발 환경 구성: 123. Apache 소스를 윈도우 환경에서 빌드하기
1047정성태5/27/201126108.NET Framework: 217. Firebird ALinq Provider - 날짜 필드에 대한 낙관적 동시성 쿼리 오류
1046정성태5/26/201130768.NET Framework: 216. 라이선스까지도 뛰어넘는 .NET Profiler [5]
1045정성태5/24/201131856.NET Framework: 215. 닷넷 System.ComponentModel.LicenseManager를 이용한 라이선스 적용 [1]파일 다운로드1
1044정성태5/24/201132420오류 유형: 122. zlib 빌드 오류 - inflate.obj : error LNK2001: unresolved external symbol _inflate_fast
1043정성태5/24/201131391.NET Framework: 214. 무료 Linq Provider - DbLinq를 이용한 Firebird 접근파일 다운로드1
1042정성태5/23/201137716개발 환경 구성: 122. PHP 소스를 윈도우 환경에서 빌드하기
1041정성태5/22/201128621.NET Framework: 213. Linq To SQL - ALinq Provider를 이용하여 Firebird 사용파일 다운로드1
1040정성태5/21/201138945개발 환경 구성: 121. .NET 개발자가 처음 설치해 본 Apache + PHP [2]
1039정성태5/17/201131648.NET Framework: 212. Firebird 데이터베이스와 ADO.NET [2]파일 다운로드1
1038정성태5/16/201133612개발 환경 구성: 120. .NET 프로그래머에게도 유용한 Firebird 무료 데이터베이스 [2]
1037정성태5/11/201128449개발 환경 구성: 119. Visual Studio Professional 이하 버전에서도 TFS의 정적 코드 분석 정책 연동이 가능할까? [3]
1036정성태5/7/201194264오류 유형: 121. Access DB에 대한 32bit/64bit OLE DB Provider 관련 오류 [11]
1035정성태5/7/201129012오류 유형: 120. File cannot be opened. Ensure it is a valid Data Link file.
1034정성태5/2/201126055.NET Framework: 211. 파일 잠금 없이 .NET 어셈블리의 버전을 구하는 방법 [2]파일 다운로드1
1033정성태5/1/201131767웹: 19. IIS Express - appcmd.exe를 이용한 applicationHost.config 변경 [2]
1032정성태5/1/201128402웹: 18. IIS Express를 NT 서비스로 변경
1031정성태4/30/201129551웹: 17. IIS Express - "IIS Installed Versions Manager Interface"의 IIISExpressProcessUtility 구하는 방법 [1]파일 다운로드1
1030정성태4/30/201151842개발 환경 구성: 118. IIS Express - localhost 이외의 호스트 이름으로 접근하는 방법 [4]파일 다운로드1
1029정성태4/28/201140976개발 환경 구성: 117. XCopy에서 파일/디렉터리 확인 질문 없애기 [2]
1028정성태4/27/201138352오류 유형: 119. Visual Studio 2010 SP1 설치 후 Windows Phone 개발자 도구로 인한 재설치 문제 [3]
1027정성태4/25/201127533디버깅 기술: 40. 상황별 GetFunctionPointer 반환값 정리 - x86파일 다운로드1
1026정성태4/25/201145828디버깅 기술: 39. DebugDiag 1.1을 사용한 덤프 분석 [7]
1025정성태4/24/201127890개발 환경 구성: 116. IIS 7 관리자 - Active Directory Certification Authority로부터 SSL 사이트 인증서 받는 방법 [2]
1024정성태4/22/201129196오류 유형: 118. Windows 2008 서버에서 Event Viewer / PowerShell 실행 시 비정상 종료되는 문제 [1]
1023정성태4/20/201130079.NET Framework: 210. Windbg 환경에서 확인해 본 .NET 메서드 JIT 컴파일 전과 후 [1]
... 151  152  153  154  155  156  157  158  159  [160]  161  162  163  164  165  ...