Upgrading GCC/ko

이 문서는 사용자를 GCC 업그레이드 과정으로 안내합니다.

도입부
GCC "업그레이드"에 대한 내용입니다. GCC를 다운그레이드 하면 원치 않는 부작용이 생길 수 있습니다. 일반적으로 보고된 문제에 대한 문제 해결 섹션을 참고하십시오.

다음 섹션에서는 GCC 업그레이드(그리고 이게 얼마나 쉬운가!)에 대한 간단한 핵심 내용을 전달하겠습니다. GCC 업그레이드 전에 장황한 핑계(?)를 읽어보려 한다면, 자세한 내용의 GCC 업그레이드편으로 계속 진행하십시오.

간단한 버전
GCC를 업그레이드 한다면 컴파일러 버전을 바꾸고 libtool을 다시 빌드하는것 이외에는 필요한 일이 없습니다:

If you upgrade GCC from a version earlier than 3.4.0 (for the 3.x series) or 4.1, you will need to run as well:

현재 버전을 확인하고 이전 버전을 삭제하십시오

다 됐습니다. 컴파일러 자아알~ 쓰세요!

도입부
GCC upgrading has always been mystified, with suggestions ranging from "You do not need to do anything" up to "You will need to rebuild your entire system twice". Most of this FUD comes from the confusion surrounding ABI incompatibility. But first a quick pointer towards.

libtool과 fix_libtool_files.sh
젠투에서 예전에 설치하던 GCC는  명령을 실행해야 했습니다. 얼마전에 이 명령의 실행을 패키지 배포 자신에 넣어(eclass 툴체인을 통해), 더이상 사용자가 이 명령을 불러올 필요가 없습니다.

The reason we need to rebuild libtool after the upgrade of versions is because of its main purpose: libtool is a toolset that aggregates platform-specific code in a generic interface, allowing applications to build against shared libraries without needing to deal with the platform specific aspects of shared libraries. To fulfill its function properly, the script uses various library locations that have hard-coded  version information in them.

ABI 변경
"Application Binary Interface"라고 하는 ABI는 컴파일러, 어셈블러, 링커, 언어 런타임 지원을 포함하는 프로그램의 바이너리 표현을 다루는 모든 도구에서 사용하는 관례(원본: GCC Binary Compatibility)입니다. 이진 프로그램과 라이브러리가 사용하던 ABI가 바뀌면 C++ 코드를 사용하는 모든 라이브러리를 다시 빌드하지 않는 한 프로그램이 링커 오류가 뜨거나 제대로 동작하지 않아 피해를 볼 수 있습니다.

Yes, C++, since most incompatibilities occur within the C++ ABI. If you are upgrading to GCC 4.1, or GCC 5.1, you would probably encounter ABI issues. This is also why we use the command against the  (from GCC 3 to GCC 4.1), or  (from GCC 4 to GCC 5.1).

그래서 왜 GCC 3.4.0/4.1/5.1 이상에서만 필요할까요? 버전에 따른 이유인데, GCC는 프로그램과 라이브러리를 다시 빌드할 필요성을 제거한 차기 호환 ABI를 사용합니다. 물론 보증은 확실히 못하지만 비호환성이 또 발생하면 여기에 문서로 남겨놓도록 하겠습니다. 이 경우, 라이브러리의 버전은 증가할 것입니다.

특별한 경우 C++11(및 C++ 14)
While GCC (or more specifically, libstdc++) goes to great lengths to guarantee stability of the ABI, this guarantee does not extend to all parts of C++ within libstdc++. Formally, with versions starting from 3.4, GCC/libstdc++ only guarantees C++98/C++03 ABI stability and not more. This is crucial for packages that depend on C++11. GCC only makes C++11 ABI stability guarantees beginning with version 5.1. This means that switching (even minor) versions of gcc (say from 4.7.3 -> 4.7.4) might cause ABI breakage for binaries built from C++11 code.

For more information and some examples, see:


 * https://bugs.gentoo.org/show_bug.cgi?id=513386
 * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61758
 * https://blogs.gentoo.org/blueness/2015/03/10/the-c11-abi-incompatibility-problem-in-gentoo/
 * http://stackoverflow.com/a/16196475

모두 다시 빌드
어떤 사람들은 새 GCC 버전이 동작하게 하려면 시스템의 모든 단일 꾸러미를 다시 빌드해야 한다고 주장합니다. 물론, 딱히 문제가 되는건 아니고, 어쨌듵 빌드 및 설치 과정에서 GCC를 사용하지 않는 프로그램이 많이 있기 때문에, 이런 바뀐 상황에 영향을 주진 않습니다.

That however doesn't mean they are completely incorrect: newer GCC versions often include better support for the processors' instruction set, which might influence the performance of some applications in a positive way. Although it is expected that this improvement is generally only marginal, in some cases (especially CPU intensive applications) this might yield notable improvements.

동일한 컴파일러로 빌드할 필요가 있는 꾸러미에 대해 몇가지 알려진 경우가 더 있습니다. 젠투를 통해 보통 꾸러미 버전이 동시에 올라가긴 하지만(그래서 항상 동일한 GCC 버전으로 빌드합니다), 이 꾸러미들을 따로 골라서 재설치하는 경우는 문제가 있음이 증명됩니다. 여러가지 패키지는 이러한 상황에 대한 좋은 예입니다.

libstdc++.so.6: `GLIBCXX_3.4.15' 버전을 찾을 수 없음
업데이트 하는 동안 다음과 같은 오류를 만날 수 있습니다:

이는 빌드한 의존 라이브러리보다 "오래된" GCC 버전으로 패키지를 빌드하려 함을 의미합니다. 차기 호환성이 있는 C++ ABI를 호출했음을 기억하십니까? 맞는 말이긴 한데, 프로그램을 빌드하고 라이브러리에 연결(이들 라이브러리를 빌드할때 사용한 GCC 버전과 비교했을 때)할 때는 "더 높은" GCC버전에 대해서만 동작이 보장됩니다.

To rebuild all the packages depending on libstdc++, see the previous revdep-rebuild section.

리빌드 해야 한다고 알려진 꾸러미는 무엇인지요?
The following table gives the packages that, if installed, need to be rebuilt and why.

추가 참조

 * GCC Upgrading up to 4.1, the previous version of this document
 * Upgrading from gcc-4.x to gcc-5.x