2016-11-30 1 views
1

에 베어 메탈 (bare-metal)에서 실행하고 있지 않다 보장하기 위해 확인, 내가컴파일러 내가 호스팅 환경 I는 베어 메탈 (bare-metal)의 C 프로그램을 컴파일하고있어 경우

#if defined(__linux__) 
#error "You're not using a cross-compiler." 
#endif` 

그러나 같은 것들을 삽입 할 수 있습니다 알고, 모든 운영 체제를 확인하고 싶지 않습니다. 호스팅 된 환경에 있는지 한 번 확인합니까?

+0

베어 메탈에서 컴파일 하시겠습니까? –

+0

@ Jean-FrançoisFabre 예. 명확성을 위해 질문이 업데이트되었습니다. – Newtang

+1

_for_ baremetal을 컴파일하는 것을 알고 있지만 컴파일러 _on_ baremetal을 실행할 계획입니다. 아마도 그렇지 않습니다. –

답변

1

-ffreestanding으로 빌드를 결정하려면 __STDC_HOSTED__ 매크로에 대한 코드 검사를 수행하십시오. 일반 코드의 경우 1로 설정되고 독립 실행 형 빌드의 경우 0으로 설정됩니다.

GCC 정보 페이지 또는 문서를 참조하십시오. 관련 인용은 호스팅 구현을위한 컴파일러, 정의 '1'로 'STDC_HOSTED'를하고 ISO C 함수의 이름을 사용하는 경우 는, 그들이 가지고있는 것으로 추정 역할을 기본적으로

입니다 의미는 표준에 정의 된 입니다. 독립 실행 형 환경에 맞게 구현 된 규격을 준수하도록하려면 '-ffreestanding'옵션을 사용하십시오. 'STDC_HOSTED'을 '0'으로 정의하고 은 표준 라이브러리의 함수 이름의 의미에 대해 가정하지 않습니다 (예외는 다음에 명시).

관련 문제