C++에서 DLL을 작성하고 std :: vector 매개 변수를 사용하는 메서드를 내보내고 싶습니다. 다른 STL 버전 간의 바이너리 호환성을 기대할 수 있습니까?STL 컨테이너의 이진 호환성
답변
동일한 컴파일러의 업데이트 된 버전에 포함 된 버전을 의미하는 경우 예, 일부 경우에는 작동 할 수 있지만주의해야합니다. Windows의 Intel 및 Microsoft 컴파일러와 같은 몇 가지 특수한 경우도 있습니다. Intel은 이진 호환성을 유지하는 데 매우주의를 기울였으며, 적어도 시도해 보았을 때는 항상 잘 작동했습니다.
기타 대부분의 경우 대답은 '아니오'입니다.
같은 컴파일러에서 릴리스와 디버깅 사이의 버전 간 호환성에 대한 어떠한 보장도하지 않습니다.
하나의 솔루션은 벡터에 대한 래퍼를 만드는 것입니다. 컨테이너에서 필요한 모든 기능을 가진 클래스를 만들고 클래스의 유일한 멤버 인 private 벡터에 대한 연산 측면에서 구현하십시오. 모든 클래스 코드를 DLL에 보관하십시오.
+1 - 그렇다고해서 이식 할 수있는 것은 아닙니다. 예외 처리 스키마와 같은 것들은 컴파일러 버전이나 컴파일러 스위치간에 변경 될 수 있으며 이러한 것들을 제어 할 수는 없습니다. 일반적으로 바이너리 호환성을 원하면 C 인터페이스를 사용해야합니다. (예를 들어, MSVC++에서는'/ SAFESEH'와'/ Eh' 스위치가 바이너리 레벨 예외 모델을 변경합니다. 그리고 적어도/GS도 믿습니다) –
절대적으로! 동일한 컴파일러의 다른 버전으로 컴파일 된 경우 STL의 동일한 버전이 호환되는 경우에도 의존 할 수 없습니다.
- 1. STL 컨테이너의 지속 참조
- 2. STL 컨테이너의 const 포인터
- 3. STL 컨테이너의 범위 기반
- 4. stl 컨테이너의 크기 처리
- 5. C++ STL 컨테이너의 NULL 포인터
- 6. stl 컨테이너의 요소 유형 확인 -
- 7. STL 컨테이너의 요소에 반복자 반환
- 8. STL 컨테이너의 lambda + for_each + delete
- 9. STL 컨테이너의 읽기 전용 작업
- 10. 이진 검색 C++ STL
- 11. FILE의 이진 호환성 *
- 12. 하나의 STL 컨테이너의 내용을 다른 STL 컨테이너로 복사
- 13. C++ STL 연관 컨테이너의 키/값 결합
- 14. 정렬 된 STL 컨테이너의 키가 허용되는 포인터입니까?
- 15. 자바 - 추상 클래스와 서브 클래스의 이진 호환성
- 16. GCC 타겟 특이성 및 이진 호환성
- 17. C# 플러그인 시스템 이진 호환성 문제
- 18. VB6 이진 호환성 - 새로운 이벤트 추가
- 19. C++ STL 컨테이너의 value_type의 정적 멤버 함수 호출
- 20. STL 컨테이너의 상태 저장 할당 자에 대한 컴파일러 지원
- 21. 템플릿을 사용할 때 stl 컨테이너의 size_type 유형을 사용하는 방법은 무엇입니까?
- 22. STL :: map 컨테이너의 최대 크기를 제한하는 방법이 있습니까?
- 23. STL 컨테이너의 내용을 보는 데 사용하는 디버거 도구 (Linux)
- 24. VS 2010과 VS 2010 SP1 사이의 이진 호환성 C++ 바이너리
- 25. LLVM 및 시각적 스튜디오 .obj 이진 비 호환성
- 26. 정렬되고 정렬되지 않은 STL 컨테이너
- 27. 바이너리 호환성과 이전 버전과의 호환성
- 28. 다른 STL 컨테이너의 복잡성 (성능)을 비교하는 방법은 어디에서 찾을 수 있습니까?
- 29. 컨테이너의 각 요소에 대한 멤버 함수 호출
- 30. stl 호환 컨테이너
다른 컴파일러 플래그를 사용하여 동일한 STL 버전에서 이진 호환성을 기대할 수 없습니다. –