2014-12-01 9 views
16

Linux 배포판의 하위 관리자로서, 일반적으로 유지 관리하는 패키지 중 일부는 코드 기반에서 C++ 11 기능을 사용하기 시작합니다. 이들 모두는 Linux 배포판에 패키지화 된 여러 라이브러리에 의존합니다.현재의 Linux 배포판에서 C++ 11 소프트웨어를 패키지화하는 것이 안전합니까?

Problems with the ABI C++ 11 코드를 C++ 98 및 AFAIK와 혼합 할 때 현재 주요 Linux 배포판의 대부분은 패키지 생성을위한 소프트웨어 컴파일시 C++ 11 플래그를 기본적으로 사용하지 않습니다.

질문은입니다. 주요 Linux 배포판은 어떻게 C++ 11 코드의 항목을 처리합니까? 시스템 라이브러리를 사용할 때 ABI에서 이러한 문제를 확인하거나 피할 수있는 적절한 방법이 있습니까?

감사합니다.

+8

"현재 주요 Linux 배포판의 대부분이 C++ 11 플래그를 활성화하지 않습니다"에 대한 참조를 제공 할 수 있습니까? – DRC

+1

g ++ 버전을 혼합하고 있습니까? 내가이 문제가 GCC에서 수정되었다고 생각하지 않는다면 4.8 – Mgetz

+0

@Mgetz 4.8.1은 여전히 ​​적어도 하나의 언급 된 이슈를 갖고 있으며, 4.8.2는 언급 된 몇 가지 미성년자를 가지고있다. – Yakk

답변

2

이 이슈는 C++ 11이 C++ 11과 다른 점은 C++ 11이 바이너리 변경을 유발할 수 있다는 점을 제외하고는 아무 관련이 없습니다. C++ 11에 의해 동기 부여 된 이진 변경에는 특별한 것이 없습니다. 그것들은 규칙적인 바이너리 변경처럼 깨지거나 깨지지 않습니다. 또한 라이브러리 유지자가 특별히 이진 인터페이스를 변경하도록 선택하는 경우에만 변경됩니다.

즉, 라이브러리가 명시 적으로 다른 표준 버전 (라이브러리 선택 사항 임)에 두 개의 다른 바이너리 인터페이스를 제공하기로 선택하지 않는 한이 버전은 표준 버전 및 라이브러리와 관련된 모든 것과 관련이 없습니다. 이 경우를 제외하면, C++ 98 에서처럼 C++ 11에서와 마찬가지로 망가졌습니다. Itanium은 C++ 11을 지원하는 버전과 C++ 98을 지원하는 버전 사이에서 하위 호환이 가능하므로 컴파일러 ABI가 손상되지 않습니다.

4.7.0을 사용하여 재미있는 일을 깨고 깨지 않는 한 메모리에서 libstdC++로는 꽤 안전합니다. 한 번의 큰 휴식을 취할 수있는 미래의 릴리스에서 ABI 손상을 저장하고 있습니다. .

즉, C++ 11 로의 전환 기간은 ABI를 깰 수있는 추가적인 동기를 유발할 수 있으므로 실제로 을 사용하여 C++ 11 자체는 추가 위험을 초래하지 않습니다.