C++ 11 ("lambdas"를 사용합니다)의 코드를 ".o"또는 "aa"라이브러리로 컴파일한다고 가정합니다. 그리고 이전 라이브러리 및 헤더 파일을 포함 할 프로그램이 있는데 C++ 11에서는 컴파일 할 수 없지만 이전 프로그램 (C++ 98)에서는 컴파일 할 수 없습니다. 컴파일되어 제대로 작동합니까?C++ 11 코드/라이브러리가 아닌 C++ 11 프로그램
답변
아마도 그렇지 않습니다. C++에서 이름 변환 (왜 ABI가 변경되는지)이 존재하는 이유는 C++ 버전 간의 비 호환성으로 인해 코드가 불안정해질 수 있기 때문입니다.
C++ 11에 대해 컴파일하지 않는 코드가있는 경우 다른 컴파일러와 비교하여 컴파일 할 프로그램 중 하나를 리팩터링해야 할 수 있습니다. (대부분의 경우 새 컴파일러로 이전 코드를 컴파일해야합니다.)
이 옵션이 아닌 경우 C++ 11 lib에 C 인터페이스 또는 COM 개체 인터페이스가있는 DLL을 만들 수 있습니다. 그러나 예외가 경계에서 멈출 것이고 DLL 경로를 사용하면 C++ 11 객체에 액세스 할 수있는 래퍼 클래스를 작성하여 pre C++ 11에서 객체처럼 작동 할 수 있습니다. 경계의 측면.
경우는 잘 작동합니다 :
이- (공개) 헤더에 플랫폼/컴파일러를 참조 ABI의이
- 변경되지 않았습니다
- 어떤 C++ 11 기능을 사용하지 않습니다 이와
- 공통 의존성은 GCC 문서 당
- 변경 없다 Vaughn Cato가 연결된 에는 표준 라이브러리이 포함되어 있습니다. C++ 11로 컴파일 할 때 다른 코드 또는 객체 레이아웃을 생성하고 라이브러리와 클라이언트 모두에서 사용되는 것은 문제 일 수 있습니다 ... 인터페이스 자체에서 사용되지 않는 경우에도 문제가 될 수 있습니다.
점 (3)이 유일한 문제가 있다면, 당신은 플랫폼에서 .so를, 또는 .dynlib, 또는 아드리안 같은 DLL을 따라 (동적 라이브러리를 컴파일하여 주위를받을 수 있습니다 내부적으로 정적으로 링크되고 내보내지지 않은 모든 의존성을 가진). 그래도 조금 털이 많습니다.
스마트 포인터의 사용 및 동작과 같은 일부 경우가 있다고 생각합니다. 다른 언어 버전의 "일반적인"포인터로 볼 수있는 스마트 포인터의 가능한 문제점을 설명하는 게시물을 여기 기억합니다. . – user2485710
이것이 실제로 가장 좋은 답변이며, 저를 구해주었습니다.나는 C++ 11 라이브러리가 C++ 03 런타임에 링크 된 응용 프로그램을 사용하여 많은 C++ 11 기능을 손상시킬 수 있다고 덧붙였습니다. std :: current_exception()은 제대로 작동하지 않을 수 있습니다. C++ 11 라이브러리를 C++ 11 컴파일 런타임에 연결하면 컴파일 된 응용 프로그램이 의도 한대로 작동합니다. 즉, 최신 C++ 컴파일러와 STL (모든 컴파일에서 동일한 버전 유지)을 사용하면 성공할 가능성이 큽니다. 니올 –
한 가지 공통적 인 접근 방법은 불투명 포인터를 사용하여 객체가 전달 된 C 버전의 API (extern "C"
함수)를 제공하는 것입니다. 이것은 언어와 컴파일러간에 호환 가능성이 높습니다.
- 1. C++ 11
- 2. C++ 11
- 3. C++ 11
- 4. C# 프로그램 내에서 C++ 11 사용
- 5. C++ 11 정규식 수식
- 6. 표준 : : for_each를, C++ 11
- 7. C++ 11 initializer_list 오류
- 8. template typedef C++ 11
- 9. std :: void가 아닌 함수의 스레드 (C++ 11)
- 10. C++ 11 visual_studio에서 thread_local 키워드 지원 11
- 11. C++ (11) 나 C++ 11 enable_if 다음과 같은 예를 보았다
- 12. C++ 11 Polyfills
- 13. 스레딩 지원 ++ C++ 11
- 14. 사용 - C++ 11 예를
- 15. clang ++ C++ 11 호출
- 16. 추정 시간 C++ 11
- 17. C++ 11/생성자 생성자
- 18. C++ (11) 대안은
- 19. C++ 11 condtional variable
- 20. C++ 11 기능 검사
- 21. C++ 11 "class"키워드
- 22. 게으름에서 C++ 11
- 23. C++ 11 파괴자 = 삭제
- 24. C++ 11 "자동"의미
- 25. 순수 기능 C++ (11)
- 26. C++ 11, 세트를 살리기
- 27. 확인 C++ (11)
- 28. 배열 C++ 11
- 29. C++ 11 in autotools
- 30. C++ 11 async + then
음, 헤더가 C++ 11을 사용합니까? – Cameron
여기에 좋은 정보가 있습니다 : http://gcc.gnu.org/wiki/Cxx11AbiCompatibility –
@Cameron Header에는 코드 구현이 없습니다. – WaciX