2010-04-26 2 views
4

찾았습니다. hard way 적어도, boost::program_options은 컴파일러가 구성된 구조체 정렬에 종속됩니다.라이브러리를 높이려면 구조 부재 정렬에 의존해야합니까?

기본 설정을 사용하여 부스트를 빌드하고이를 4 바이트 정렬 (/Zp4)을 사용하는 프로젝트와 연결하면 런타임에 실패합니다 (program_options를 사용하여 최소 테스트 수행). Boost는 잘못된 호출 규칙을 나타내는 어설 션을 생성하지만 실제 이유는 구조체 멤버 정렬입니다.

이것을 방지 할 수있는 방법이 있습니까? 정렬을 통해 코드가 호환되지 않는 경우 라이브러리 명명에이 코드를 포함하면 안됩니까?

+0

알다시피, ABI를 변경하는 많은 컴파일러 옵션이 있습니다. 그들 모두를 지명 할 수는 없습니다. 가끔 Boost 개발자라도 사용자가 유능하고 라이브러리에 연결하는 방법을 알고 있다고 가정해야합니다. – jalf

+1

프로그램 옵션 lib를 직접 컴파일하고 있습니까? 또는 prebuilt를 사용합니까? 테스트 케이스를 제공 할 수 있다면 (예 : 블라디미르 피), 디버깅을 좋아합니다. 왜냐하면 * 모든 * 코드가 호환 가능한 옵션으로 컴파일 되기만하면 안되기 때문입니다. – GrafikRobot

답변

8

귀하가 연결하는 프로그램과 라이브러리가 동일한 ABI를 갖출 수 있도록해야합니다.

C++ 클래스 및 함수의 ABI를 변경할 수있는 컴파일러 스위치의 수가 너무 많아서 3000 가지 이상의 조합 이름을 지정하는 것이 분명합니다.

자세한 내용은 here을 참조하십시오.

관련 문제