부스트를 컴파일 할 때 roost_disable_abi_headers를 정의하면 어떤 피해가 발생할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/410981

  •  03-07-2019
  •  | 
  •  

문제

부스트를 컴파일 할 때 roost_disable_abi_headers를 정의하면 어떤 피해가 발생할 수 있습니까?

부스트 파일에서 : boost_1_37_0 boost config user.hpp

// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any 
// prefix/suffix headers that normally control things like struct 
// packing and alignment. 
//#define BOOST_DISABLE_ABI_HEADERS

부스트가 구조물 포장 및 정렬을 제어 할 필요성을 느끼는 이유는 무엇입니까?

부스트 직렬화와 관련이 있고 모든 플랫폼에서 동일하게 작동하는지 확인해야합니까? Windows 만 실행중인 경우 안전하게 정의 할 수 있습니까?

도움이 되었습니까?

해결책 3

다음은 boost_disable_abi_headers를 정의하는 요점입니다.

  • 공유 부스트 DLL을 사용하면 정의되지 않은 동작이됩니다.
  • 부스트 라이브러리에 정적으로 링크하거나 자신의 DLL 만 사용하고 있다고 확신한다면 안전 할 수 있습니다.
  • 프로젝트에서 여러 .libs에서 부스트를 사용하면 컴파일러 설정의 변경과 동일한 컴파일러 설정이 포장 및 정렬을 다르게 만들 수 있습니다.
  • 다른 OS와 플랫폼 사이의 호환성 (x86 vs x64)이 부스트 직렬화와 같은 것에는 효과가 없을 것이라고 생각합니다.

전반적으로 이것을 정의하는 것은 안전하지 않으며 그것을 내버려 두는 것이 훨씬 안전합니다.

다른 팁

정의는 ABI를 보장합니다 (애플리케이션 이진 인터페이스) 버전과 컴파일러간에 호환됩니다. 그 없이는 응용 프로그램에서 다른 응용 프로그램이 설치 한 부스트 DLL을 사용할 수 없습니다 (이는 귀하와 다른 컴파일러로 컴파일되었을 수 있음).

정적으로 부스트를 링크하거나 앱이 Boost DLL 만 사용하도록 할 수 있다면 자신이 컴파일 한 DLL을 사용하는 경우 예, 안전하게 정의 할 수 있습니다. 그러나 확신 할 수 없다면 정의해서는 안됩니다.

Boost Docs에서 찾을 수있는 것은 다음과 같습니다.http://www.boost.org/doc/libs/1_31_0/libs/config/config.htm

상당히 오래된 버전이지만 아마도 #define의 의미는 변경되지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top