젠투 시스템에서 gcc를 업그레이드한 후 다시 빌드할 소프트웨어 패키지

젠투 시스템에서 gcc를 업그레이드한 후 다시 빌드할 소프트웨어 패키지

gcc젠투 시스템을 업그레이드한 후 어떤 패키지를 다시 빌드해야 합니까? 달리기에는 충분합니까?

# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`

제안 된대로이 FAQ에서 Perl에 대해?

답변1

긴 이야기 짧게

Gentoo 사용자로서 저는 이에 대해 다른 관점을 가지고 있습니다. 나는 Peterev의 "시스템이 결정하도록" 접근 방식에 동의하지만 동의하지 않습니다.ABI고쳐 쓰다. ABI 업데이트는 때때로 동작의 중요한 변화입니다. GCC 4.7을 예로 들면, ABI 변경은 새로운 C++11 표준을 채택하는 것이라고 Peterph도 지적했습니다.

그래서 제가 이 답변을 썼습니다. 나는 표준 중독자입니다. 제가 처음 웹 세계에 입문했을 때 브라우저는 4개 정도 있었고, HTML의 상당수의 태그는 특정 브라우저에서만 지원되었습니다. 당시 이러한 모든 라벨은 혼란을 가중시켰고 IMO는 작업을 더욱 어렵게 만들었습니다. 같은 이유로 C++는 간단히 말해서 표준화되었습니다.내가 작성한 코드를 당신도 컴파일할 수 있고, 당신이 작성한 코드를 나도 컴파일할 수 있습니다.. 표준을 따르지 않기로 결정하면 공유의 자유를 잃게 됩니다.

C++98은 13년 동안 표준으로 승인되었습니다. C++11은 2011년 ISO 위원회의 승인을 받아 GCC 4.7에 완전히 통합되었습니다. 보다현재 ISO 상태,게다가새로운 ISO 표준.


젠투 사용자로서 특권을 느껴야 하는 이유

소스 기반 배포판 사용자로서 우리는 패키지를 사용하기 전에 컴파일하기 때문에 패키지의 향후 동작을 형성할 수 있는 독특한 기회를 갖고 있습니다. 그래서 이번 기회에 대비해서 새 컴파일러로 업데이트할 때 다음을 실행해야겠다고 생각했습니다.

emerge -ev system
gcc-config -l && gcc-config *new compiler name*
env-update && source /etc/profile
emerge -1v libtool
emerge -ev system

처음으로 시스템을 통해 이전 컴파일러에 대한 새 컴파일러와 해당 종속성을 빌드합니다. 시스템을 두 번째로 통과하면 새 컴파일러와 새 컴파일러에 대한 종속성이 다시 빌드됩니다. 구체적으로 우리는 이렇게 하고 싶습니다.링크 구축빌드 체인 패키지도 업데이트된 경우 새 컴파일러의 새로운 기능을 활용합니다... 어떤 사람들은 두 번째 패스 시스템을 월드 세트로 대체하지만, 어떤 패키지가 이미 지원하는지 모르기 때문에 이는 과잉이라고 생각합니다. 하지만 우리는 빌드 체인이 제대로 작동하기를 정말로 원합니다.

롤링 릴리스를 사용하므로 적어도 시스템 세트에 대해 이 작업을 수행하면 새로운 표준에 대해 컴파일된 모든 패키지를 테스트할 수 있습니다. 이러한 방식으로 빌드 체인을 업데이트한 후 추가하면 -std=c++11손상된 CXXFLAGS사례를 테스트하고 버그를 버그질라 또는 실제 개발자 업스트림에 직접 제출할 수 있습니다. 이유는 다음과 같습니다.

안녕하세요, 귀하의 패키지 등이 새로운 C++ 표준을 위반했습니다. 빌드 로그를 첨부했습니다.

표준이 더욱 널리 채택되고 기존 표준이 단계적으로 폐지됨에 따라 이제 준비할 시간이 생겼기 때문에 이것이 개발자에 대한 예의라고 생각합니다. 표준이 단계적으로 폐지될 때까지 기다렸다가 수백 개의 버그를 받았다면 개발자가 느낄 혼란을 상상해 보십시오.

내가 아는 한, 해당 사용자 커뮤니티에 패치나 업데이트가 제공되기 전에 실제 패키지 관리자가 중개인으로 존재하기 때문에 다른 배포판에서는 이 접근 방식을 사용하지 않습니다. 우리에게는 관리자가 있지만 로컬 포티지 트리를 사용할 수도 있습니다.


현상금 요청 게시에 대한 통찰력 있는 생각

여러분 모두가 제 통찰력 있고 사려 깊은 답변을 좋아해주셔서 제가 현상금을 게시하는지는 모르겠지만, 저는 현상금을 얻기 위해 여러분의 통찰력 있고 사려 깊은 현상금 제안에 답변하도록 노력하겠습니다. 먼저, 소스 기반 배포판의 사용자로서 저는 점들을 연결하는 것이 현상금 요청에서 요구한 전부라고 굳게 믿습니다. 누군가는 훌륭한 프로그래머가 될 수 있지만 소프트웨어에 관심을 갖는 데는 형편없을 수 있습니다. 마찬가지로, 형편없는 프로그래머지만 소프트웨어에 깊은 관심을 갖는 사람들이 있습니다.

여기 오기 전에는 열렬한 포스터 매니아였습니다.젠투 포럼. 여기 오기 시작했을 때 마침내 모든 사람이 활용할 수 있는 어느 정도의 재능이 있다는 것을 깨달았습니다. 기여도의 차이를 만드는 것은 그들이 그것을 사용하기로 선택한 것입니다. 우리 중 일부는 훌륭한 작가입니다(저는 아닙니다). 따라서 프로젝트에 기여하고 싶지만 코드를 작성하거나 버그를 수정할 수 없거나 할 수 없다면 훌륭한 작가는 훌륭한 문서나 훌륭한 위키 기사를 작성할 수 있다는 점을 기억하십시오.

이 표준은 또 다른 이유로 존재합니다.커뮤니티에서 구성원은 특정 규칙을 따라야 합니다.. 그 진술은 여기에서도 이어집니다. 수정 사항, 패치, 개선 사항 등을 제출했는데 표준이 없으면 중요하다고 생각하는 경우에만 패치가 작동합니다. 즉, whizbang 컴파일러 2.0을 사용하고 해당 패치가 whizbang 컴파일러 1.0에 대해 빌드된 경우에는 실패합니다. . 이 작업은 커뮤니티를 위한 것이며 커뮤니티는 대부분의 경우 모든 것이 작동하기를 원하므로 모든 사용자가 컴파일러 2로 업그레이드하도록 강요하는 대신 표준에 지정할 수 있습니다.

이 패키지 옵션은 Whizbang Compiler 1.0과의 하위 호환성을 허용합니다.

이렇게 하면 개발자로서 나는 형편없는 코더인지 아닌지에 관계없이 컴파일러 버전 1.0을 사용하거나 최소한 테스트해야 한다는 것을 알고 있습니다. 반면에, 나는 사용자로서 내가 하고 싶은 일을 선택할 수 있습니다. 만족스럽지 않으면 버그를 신고하여 패치를 요청하거나 "이 소프트웨어는 쓰레기입니다!"라는 극단적인 조치를 취하고 아무것도 하지 않을 수 있습니다. 그럼에도 불구하고 사용자와 개발자는 표준이 작성되었기 때문에 표준을 이해합니다.

격차를 해소하려면 사용자의 어떤 형태의 조치가 필요합니다. 이를 위해서는 여러분이 저와 다른 사람들에게 댓글을 달도록 요청한 모든 사항이 필요하며, 우리는 이러한 격차를 해소하기 위해 사용자 커뮤니티와 그들의 다양한 형태의 재능에 의존해야 합니다. 기여하는 사용자 중 한 명이 되기를 선택하셨다면 박수를 보내드립니다. 비활성 상태를 선택한 사람들의 경우, 문제를 해결하려면 활성 상태인 사람들의 의견이 필요하다는 점을 기억하십시오. 그러니 버그를 신고하는 것을 부끄러워하지 말고, 우리가 무례하다면 문서를 업데이트해야 한다고 말하거나, 자신의 전문 분야를 찾을 때까지 다른 사람을 찾으라고 말하세요.


이 주제와 관련된 다른 흥미로운 자료

  1. C++11의 가장 큰 변화(그리고 관심을 가져야 하는 이유)
  2. GCC에서 C++0x/C++11 지원
  3. 표준 C++에 대한 뉴스, 상태 및 토론

답변2

어떤 유형의 컴파일러 업그레이드를 했는지에 따라 많은 것이 달라집니다. 그것이 상당하다면 모든 것이 그래야 한다.재컴파일*) 컴파일러가 ABI를 변경할 수 있기 때문입니다. 대부분의 경우 이는 필요하지 않지만 패키지가 C++11과 같은 것에 의존하는 경우 문제가 발생할 수 있습니다.GCC 4.7의 ABI 변경 사항에 대한 Gentoo 소식또는GCC 버그질라.

*) "재컴파일"을 강조합니다. C 컴파일러가 변경되었기 때문에 Python 또는 Perl 애플리케이션을 재컴파일(다시 빌드 읽기)하는 것은 전혀 의미가 없습니다. 기본 구성 요소도 포함하지 않는 한(대부분).

관련 정보