2016-11-10 1 views
2

임베디드 프로젝트를 처음으로 테스트 드라이브에 추가합니다. IAR 7.60.2를 C++, Standard, Exceptions, RTTI 및 Stroy Object 파괴로 설정하고 있습니다.IAR의 C++ 컴파일러에서 부스트 사용하기

부스트 1.62.0을 사용하여이 Boost Getting Started Example을 복사하여 붙여 넣었습니다.

이 질문의 존재로 짐작할 수 있듯이 빌드에 실패합니다 (첫 번째 오류는 Error[Pe439]: expected a ">" ...\boost_1_62_0\boost\type_traits\remove_reference.hpp 30입니다).

그 행에는 C++ 03에서 지원되지 않는 rvalue 참조가 포함됩니다. Boost의 현대 C++ 구조의 사용으로 인한 오류의 수는 T&&constexpr입니다.

IAR은 Boost가 테스트 한 컴파일러가 아니지만 Boost가 boost/predef에 IAR 관련 헤더의 존재와 결합 된 pre-C++ 11 컴파일러와 함께 작동 할 수 있다는 사실 그것을 구축 할 수있는 방법이있을 것이라고 믿게합니다.

내가 SO 검색 한

, 인터 웹 및 부스트의 소스의 일부,하지만 난 IAR와 부스트를 사용하는 방법에 대한 모든 관련 정보를 찾을 수없는, 그래서 물어 온 : 아무것도 내가

1 있는가 Boost가 내가 사용하고있는 IAR 컴파일러와 그 한계를 인식하도록 도와 주어야합니까?

2. 강제 부스트를 C++ 03 컴파일러 용으로 빌드 할 수있는 메커니즘이 있습니까?

미리 감사드립니다.

+0

부스트는 라이브러리 모음입니다. 모든 라이브러리가 동일한 컴파일러를 지원하는 것은 아닙니다. 즉, 컴파일러 탐지를 포함한 공통 인프라가 있습니다. 그래서 C++ 03에는'#define '이 없다는 것이 확실합니다. – MSalters

+0

그렇다면 일반적인 인프라가 C++ 03로 제한된다는 사실을 포함하여 제 컴파일러를 인식 할 수있는 방법이 있습니까? – U007D

+0

글쎄, 당신은 이미'boost/predef'를 발견했습니다. 귀하의 컴파일러가 그렇게 인식되고있는 것 같습니다. 그러나 Boost 1.62는 C++ 14 이후 2 년 후에 출시되었으며, 여전히 C++ 11 이전 컴파일러로 어려움을 겪고 있습니다. 오래된 Boost 버전으로 더 나을 수도 있습니다. – MSalters

답변

0

위 @ MSalter의 의견의 요약 :

부스트는 주로 자원 봉사자로, 다른 사람들에 의해 만들어진 유지 다른 연령대의 라이브러리의 모음입니다. 일부 라이브러리는 이전 버전의 C++에서 작동하도록 제작되었으며 일부 라이브러리는 최신 버전이 필요합니다.

부스트에는 특정 설정을 제어하기위한 몇 가지 공통 인프라가 있습니다. 누군가가 찾고있는 설정이 Boost 공통 인프라 스트럭처에 의해 지원되지 않는다면 (그리고 "C++ 03을위한 컴파일"은 그렇지 않다), 주어진 라이브러리가 C++ 03 하에서 컴파일을 지원하는지 여부는 그것이 언제 만들어 졌는지에 달려 있으며 또는 그렇게하도록 특별히 고안되었는지 여부. Boost에는 글로벌 언어 표준 설정이 없습니다.

해결 방법은 해당 기능을 사용중인 환경에서 작동하는지 확인하는 것입니다.

설명을 위해 @MSalter에게 감사드립니다.

관련 문제