2011-04-20 2 views
5

C++에서 DLL을 작성하고 std :: vector 매개 변수를 사용하는 메서드를 내보내고 싶습니다. 다른 STL 버전 간의 바이너리 호환성을 기대할 수 있습니까?STL 컨테이너의 이진 호환성

+5

다른 컴파일러 플래그를 사용하여 동일한 STL 버전에서 이진 호환성을 기대할 수 없습니다. –

답변

3

동일한 컴파일러의 업데이트 된 버전에 포함 된 버전을 의미하는 경우 예, 일부 경우에는 작동 할 수 있지만주의해야합니다. Windows의 Intel 및 Microsoft 컴파일러와 같은 몇 가지 특수한 경우도 있습니다. Intel은 이진 호환성을 유지하는 데 매우주의를 기울였으며, 적어도 시도해 보았을 때는 항상 잘 작동했습니다.

기타 대부분의 경우 대답은 '아니오'입니다.

6

같은 컴파일러에서 릴리스와 디버깅 사이의 버전 간 호환성에 대한 어떠한 보장도하지 않습니다.

하나의 솔루션은 벡터에 대한 래퍼를 만드는 것입니다. 컨테이너에서 필요한 모든 기능을 가진 클래스를 만들고 클래스의 유일한 멤버 인 private 벡터에 대한 연산 측면에서 구현하십시오. 모든 클래스 코드를 DLL에 보관하십시오.

+0

+1 - 그렇다고해서 이식 할 수있는 것은 아닙니다. 예외 처리 스키마와 같은 것들은 컴파일러 버전이나 컴파일러 스위치간에 변경 될 수 있으며 이러한 것들을 제어 할 수는 없습니다. 일반적으로 바이너리 호환성을 원하면 C 인터페이스를 사용해야합니다. (예를 들어, MSVC++에서는'/ SAFESEH'와'/ Eh' 스위치가 바이너리 레벨 예외 모델을 변경합니다. 그리고 적어도/GS도 믿습니다) –

4

절대적으로! 동일한 컴파일러의 다른 버전으로 컴파일 된 경우 STL의 동일한 버전이 호환되는 경우에도 의존 할 수 없습니다.

관련 문제