Gentoo sistemlerinde gcc'yi yükselttikten sonra yeniden inşa edilecek paketler


Yanıtlar:


11

TL; DR

Gentoo kullanıcısı olarak bunu farklı bir şekilde ele alıyorum. Peterph'ın "Sistemin Karar Vermesine İzin Ver" yaklaşımını kabul ederken, bir ABI Güncellemesi söz konusu olduğunda aynı fikirde değilim . ABI Güncellemesi bazen davranışta büyük bir değişikliktir. GCC 4.7 durumunda, ABI Değişikliği, peterfın de işaret ettiği yeni C ++ 11 Standardının benimsenmesiydi.

İşte bu yüzden bu cevabı yazıyorum. Ben standart bir bağımlıyım. Web dünyasında yaklaşık 4 farklı tarayıcı ve HTML'de yalnızca belirli tarayıcılar tarafından desteklenen çok sayıda etiket olduğunda başladım. O zaman, tüm bu etiketler karışıklığı artırdı ve IMO işi daha da zorlaştırdı. C ++ yazdığım kodu derleyebilmeniz için kısaca aynı nedenden dolayı standartlaştırılmıştır ve yazdığınız kodu derleyebilirim . Bir standarda uymamayı seçersek, paylaşım özgürlüğünü kaybederiz.

C ++ 98, 13 yıldır onaylı Standarttır. C ++ 11, 2011 yılında ISO Komitesi tarafından onaylanmıştır ve GCC 4.7'ye tamamen entegre edilmiştir. Bkz geçerli ISO durumunu ve yeni ISO Standardı .


Neden Gentoo Kullanıcısı Olarak Ayrıcalıklı Hissetmeliyiz

Kaynak tabanlı bir dağıtımın kullanıcıları olarak, bir paketin gelecekteki davranışını şekillendirmek için eşsiz bir fırsata sahibiz çünkü onu kullanmadan önce derliyoruz. Bu nedenle, bu fırsata hazırlanmak için, yeni derleyiciye güncelleme yaparken aşağıdaki komutların çalıştırılması gerektiğini hissediyorum:

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

İlk geçiş sistemi yeni derleyiciyi ve bağımlılıkları eski derleyiciyle oluşturur. İkinci geçiş sistemi yeni derleyiciyi yeniden oluşturur ve yeni derleyiciye bağımlılıkları vardır. Özellikle, bizim ki bunu yapmak istiyor Yapı Zincir Yapı Zincir paketleri Bazı insanlar dünyanın seti ile sistem üzerinden 2 pas yerine ... ayrıca güncelleştirilmiş olup olmadığına I rağmen, yeni derleyici yeni özelliklerinden yararlanır hangi paketi yeni standardı zaten desteklediğini bilmediğimiz için aşırıya kaçmış gibi buluyoruz, ancak yapı zincirimizin sağlıklı davranmasını istiyoruz.

Bunu en azından sistem setine yapmak bizi yeni standarda göre derlediğimiz her paketi test etmeye hazırlar, çünkü yuvarlanan bir sürüm kullanıyoruz. Bu şekilde, yapı zincirini güncelledikten sonra ekleme işlemi -std=c++11, CXXFLAGSkırılmayı test etmemize ve hataları doğrudan bugzilla'ya veya gerçek geliştiricilere yukarı akışa gönderebilmemize izin verir:

Hey, paketiniz falan filan yeni C ++ standardını kullanıyor ve derleme günlüğümü ekledim.

Bunu, standart daha yaygın bir şekilde kabul edildikçe ve eski standart aşamalı olarak kaldırıldıkça hazırlanmak için zamanları olduğundan, geliştiricilere nezaket olarak düşünüyorum. Yüzlerce hata aldıysa geliştiricinin kargaşasını hayal edin, çünkü standart aşamalı olarak kaldırılıncaya kadar bekledi ...

Bildiğim başka hiçbir dağıtım, ilgili kullanıcı topluluğu tarafından bir yama veya güncellemenin kullanılabilmesi için gerçek paket koruyucular aracı olarak bulunduğundan bu yöntemi kullanamaz. Muhafızlarımız var, ama aynı zamanda yerel bir portage ağacı kullanma yeteneğine de sahibiz.


Ödül İsteğinde Yayınlanan Anlayışlı Düşünceler Hakkında

Ödülün gönderilip gönderilmediğini bilmiyorum, çünkü hepiniz içgörülü, iyi düşünülmüş cevaplarımı seviyorsunuz, ancak ödülün bir girişiminde, içgörülü, iyi düşünülmüş ödül teklifinize cevap vermeye çalışacağım. Öncelikle, kaynak tabanlı bir dağıtımın kullanıcısı olarak, noktaların neyi birleştirdiğinin ödül isteğinizde istediğiniz her şey olduğuna kesin olarak inanıyorum. Birisi harika bir kodlayıcı olabilir, ancak yazılım için berbat bir bakıma sahip olabilir. Aynı şekilde, yazılım için büyük özen gösteren boktan kodlayıcılar da vardır.

Buraya gelmeden önce, Gentoo Forumlarında hevesli bir posterdim . Nihayet buraya gelmeye başladığımda herkesin kullanabileceği bir dereceye kadar yetenekleri olduğunu fark ettim. Onunla ne yapmayı seçtikleri katkıda bulunan farkı yaratır. Bazılarımız Büyük yazarlar (ben değil), bu yüzden bazı projelere katkıda bulunmak istiyorsanız, ancak kod yazamaz veya yazamazsınız, büyük yazarların harika belgeler veya harika Wiki Makaleleri yazabileceğini unutmayın. .

Standart başka bir nedenden dolayı var: Bir Toplulukta üyelerinden belirli kurallar bekleniyor . Bu ifadeyi de burada takip edin. Bir düzeltme, yama, geliştirme vb. Gönderirsem ve standart yoksa, yama sadece önemli bulduğum durumlarda çalışacaktır, yani whizbang derleyici 2.0 kullanıyorsam ve yama whizbang derleyici 1.0'a karşı oluşturulmuşsa, başaramayacak. Çaba bir topluluk için olduğundan, topluluk her durumda çoğu durumda çalışmayı bekler, bu nedenle tüm kullanıcıları derleyici 2'ye yükseltmeye zorlamak yerine bir standartta şart koşabilirim:

Bu paket Whizbang Derleyici 1.0 ile Geriye Uyumluluk için izin verir

Bu şekilde, bir geliştirici, boktan kodlayıcı olsun ya da olmasın, Derleyici Sürüm 1.0'ı kullanmam gerektiğini ya da en azından test etmem gerektiğini biliyorum. Öte yandan bir kullanıcı olarak ne yapmak istediğimi seçebilirim. Mutsuzsam, bir hata göndererek ya da "Bu yazılım bir saçmalık!" Ne olursa olsun, kullanıcı ve geliştirici standardı anlıyor çünkü yazıldığı için.

Bu boşluğu doldurmak, kullanıcının formunda bir tür eylemi gerçekleştirir ve bu da bana ve diğerlerinin yorum yapmasını istediğiniz her şeyi gerektirir ve kullanıcı topluluğuna ve tüm formlardaki yeteneklerine bu boşluğu köprülememiz gerekir. Katkıda bulunan kullanıcılardan biri olmayı seçerseniz sizi alkışlarım. Aktif olmayı seçenler için, sabit bir şey istiyorsanız, aktif olanların sizin girdinize ihtiyacı olduğunu unutmayın. Bu yüzden size söylüyorum, hata gönderme konusunda utangaç olmayın veya bize dokümanları güncellememiz gerektiğini söyleyin ve kaba davranırsak, uzmanlık alanınızı bulana kadar bize bildirin veya başka birini bulun.


Bu Konuyla İlgili Diğer İlginç Okumalar

  1. C ++ 11'deki En Büyük Değişiklikler (ve Neden Bakım Yapmalısınız)
  2. GCC'de C ++ 0x / C ++ 11 Desteği
  3. Standart C ++ ile ilgili Haberler, Durum ve Tartışma

O zaman
İfadeyi

3

Ne tür bir derleyici yükseltmesi yaptığınıza çok bağlıdır. Eğer önemliyse, derleyici tarafından ABI'daki olası değişiklikler nedeniyle her şey yeniden derlenmelidir *) . Çoğu durumda gerekli olmayacaktır, ancak paketleriniz C ++ 11 gibi bir şeye bağlıysa, sorun yaşayabilirsiniz - örneğin GCC 4.7 veya GCC bugzilla'daki ABI değişikliği hakkındaki Gentoo haberlerine bakın .

*) "Yeniden derlendi" vurgusuna dikkat edin - bir C derleyicisini değiştirdiğiniz için bir Python veya Perl uygulamasını yeniden derlemek (yeniden okumak) kesinlikle mantıklı değildir. Yerel bir bileşeni olmadığı sürece (ki bu da iyi olabilir).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.