Gentoo Logo

Panduan Upgrade GCC Gentoo Linux

Daftar Isi:

1.  Pendahuluan

Upgrade GCC

Mengapa anda perlu melakukan upgrade? GCC sangat mirip dengan paket lain pada sistem anda, hanya saja agak sedikit lebih penting. Anda harus meng-upgrade GCC jika ada versi baru yang berisi perbaikan atas beberapa bug yang membuat anda jengkel, fungsionalitas baru yang yang anda butuhkan, atau jika anda hanya ingin menjaga sistem anda tetap up-to-date. Jika salah satu alasan di atas cocok dengan anda, maka anda dapat melakukan upgrade GCC dengan aman selama versi GCC anda didukung oleh para developer Gentoo.

Jika anda menginstal GCC versi mayor, seperti dari 3.3.6 ke 3.4.5), sistem anda tidak akan berpindah untuk menggunakannya secara otomatis. Anda secara eksplisit perlu melakukan proses perpindahan tersebut karena biasanya membutuhkan beberapa langkah-langkah tambahan. Jika anda memutuskan untuk tidak berpindah, Portage akan tetap menggunakan compiler versi lama sampai anda berubah pikiran, atau membuang compiler lama dari sistem. Tetapi untuk versi minor (seperti dari 3.4.5 ke 3.4.6), sistem anda akan berpindah secara otomatis untuk menggunakan compiler baru.

Panduan ini berisi langkah-langkah yang diperlukan untuk menjalankan upgrade compiler yang digunakan oleh sistem Gentoo. Terdapat sebuah seksi khusus untuk upgrade dari GCC 3.3 ke 3.4 dan beberapa masalah dengan libstdc++. Seksi khusus kedua diperuntukkan bagi para pengguna yang baru pertama kali menginstal Gentoo menggunakan tarbal stage3, setelah versi mayor/minor GCC dirilis.

Peringatan: Perlu dicatat bahwa upgrade dari GCC-3.4 (atau 3.3) ke GCC-4.1 atau yang lebih baru masih mengharuskan anda untuk mengikuti petunjuk upgrade umum, karena GCC-3.4 dan GCC-4.1 menggunakan ABI yang sedikit berbeda.

2.  Petunjuk Upgrade Umum

Pendahuluan

Penting: Jika anda memerlukan petunjuk khusus untuk upgrade dari GCC-3.3 ke GCC-3.4, silahkan membaca seksi khusus.

Penting: Jika anda memerlukan petunjuk khusus untuk upgrade GCC pada instalasi baru, silahkan membaca seksi khusus.

Biasanya, melakukan upgrade ke rilis perbaikan, seperti dari 3.3.5 ke 3.3.6, sangatlah aman dilakukan -- emerge saja versi baru, perintahkan sistem anda untuk menggunakannya lalu bangun-ulang paket yang terpengaruh, yaitu libtool. Bagaimanapun juga, ada beberapa upgrade GCC yang merusak kompatibilitas binari; pada kasus seperti ini, anda perlu membangun-ulang semua paket yang terpengaruh (atau bahkan seluruh toolchain dan system).

Kami telah mengatakan bahwa anda perlu mengganti sendiri compiler anda ke versi yang lebih baru. Bagaimanapun juga, terdapat satu pengecualian -- upgrade ke rilis perbaikan, seperti dari 3.3.5 ke 3.3.6 jika anda tidak menggunakan fitur "multislot" yang mengizinkan beberapa versi GCC terinstal pada sebuah sistem dalam waktu yang bersamaan. Multislot telah dinonaktifkan secara default karena kebanyakan user tidak memerlukannya.

Daftar Kode 2.1: Upgrade GCC

# emerge -uav gcc

(Gantikan "i686-pc-linux-gnu-3.4.5" dengan versi GCC dan setting
CHOST yang baru saja anda instal)
# gcc-config i686-pc-linux-gnu-3.4.5
# env-update && source /etc/profile

(Membangun-ulang libtool)
# emerge --oneshot -av libtool

Sekarang mari kita bangun-ulang toolchain lalu world agar kita dapat memanfaatkan compiler baru.

Daftar Kode 2.2: Bangun-ulang system

# emerge -eav system
# emerge -eav world

Pada saat ini anda dapat membuang GCC versi lama dengan aman. Jika anda ingin melakukannya, jalankan perintah berikut ini (seperti biasa, gantikan =sys-devel/gcc-3.3* dengan versi yang ingin anda uninstall):

Daftar Kode 2.3: Membuang GCC versi lama

# emerge -aC =sys-devel/gcc-3.3*

Penting: harap dicatat bahwa GCC 4.1 dan yang lebih baru hanya dapat mengkompilasi kernel 2.4.34. Jangan bang GCC versi lama anda jika anda ingin menggunakan kernel lama.

Penting: Jika anda sedang melakukan upgrade dari GCC 3.3, anda perlu menjalankan emerge --oneshot sys-libs/libstdc++-v3 untuk mendapatkan kompatibilitas dengan binari aplikasi C++ lama.

3.  Upgrade dari GCC-3.3 ke 3.4

Pendahuluan

Upgrade dari GCC-3.3 ke 3.4 agak kurang mulus disebabkan oleh perubahan ABI C++. Terdapat sebuah masalah dengan pustaka libstdc++ yang perlu kita urus.

Pilihan-pilihan

Penting: Jika anda melakukan upgrade pada komputer SPARC, anda harus menjalakan bangun-ulang sistem secara menyeluruh disebabkan oleh perubahan beberapa ABI internal pada penyampaian parameter GCC.

Anda memiliki dua pilihan dalam proses upgrade sistem anda. Metode pertama lebih cepat dan membutuhkan penggunaan utilitas revdep-rebuild dari paket gentoolkit. Sedangkan metode ke dua akan membangun-ulang seluruh sistem anda dari awal agar menggunakan fitur-fitur baru GCC. Anda bebas memilih metode manapun. Biasanya, metode pertama sudah cukup baik.

Menggunakan revdep-rebuild

Metode ini mengharuskan anda menginstal gentoolkit jika anda belum memilikinya. Kemudian kita akan meng-upgrade GCC lalu berpindah ke compiler baru. Kita juga akan membangun ulang paket libtool untuk memastikan agar toolchain dalam keadaan sempurna.

Daftar Kode 3.1: Instalasi gentoolkit dan upgrade GCC

# emerge -an gentoolkit
# emerge -uav gcc
(Gantikan "i686-pc-linux-gnu-3.4.5" dengan versi GCC dan setting
CHOST yang baru saja anda instal)
# gcc-config i686-pc-linux-gnu-3.4.5
# source /etc/profile

(Membangun-ulang libtool)
# emerge --oneshot -av libtool

Sekarang, kita akan melihat paket apa saja yang akan dibangun ulang oleh revdep-rebuild. Kemudian kita akan memerintahkan revdep-rebuild untuk membangun ulang paket-paket tersebut. Proses ini akan memakan waktu agak lama, sabarlah :)

Daftar Kode 3.2: Menggunakan revdep-rebuild

# revdep-rebuild --library libstdc++.so.5 -- -p -v
# revdep-rebuild --library libstdc++.so.5

Catatan: Anda mungkin akan mendapatkan masalah dengan versi-versi paket tertentu karena telah usang atau telah di-mask. Jika memang begini, anda perlu menambahkan opsi --package-names pada perintah revdep-rebuild. Opsi ini akan mengkompilasi paket-paket berdasarkan namanya saja, bukan nama dan versi.

Untuk menyediakan kompatibilitas dengan aplikasi binari C++ lama dan paket-paket yang mungkin terlewatkan oleh revdep-rebuild, sys-libs/libstdc++-v3 perlu diinstal sebelum anda membuang GCC 3.3 dari sistem anda.

Daftar Kode 3.3: Instalasi libstdc++-v3 dan pembersihan

# emerge --oneshot sys-libs/libstdc++-v3
# emerge -aC =sys-devel/gcc-3.3*

Menggunakan emerge -e

Metode ini, walaupun memakan waktu lebih lama, akan membangun-ulang seluruh sistem anda untuk memastikan bahwa semuanya telah dibangun dengan compiler terbaru anda, lebih aman dari metode sebelumnya. Pertama, anda perlu meng-upgrade GCC dan libtool, lalu berpindah ke compiler baru anda.

Daftar Kode 3.4: Upgrade GCC

# emerge -uav gcc
(Gantikan "i686-pc-linux-gnu-3.4.5" dengan versi GCC dan setting
CHOST yang baru saja anda instal)
# gcc-config i686-pc-linux-gnu-3.4.5
# source /etc/profile

(Membangun-ulang libtool)
# emerge --oneshot -av libtool

Untuk menyediakan kompatibilitas dengan aplikasi binari C++ lama, anda perlu menginstal sys-libs/libstdc++-v3.

Daftar Kode 3.5: Instalasi libstdc++-v3

# emerge --oneshot sys-libs/libstdc++-v3

Sekarang kita akan membangun-ulang system, kemudian world. Proses ini akan memakan waktu cukup lama, tergantung kepada jumlah paket yang telah terinstal, karena seluruh toolchain dan file-file pendukung sistem anda akan dibangun-ulang, berikut seluruh paket pada sistem anda, termasuk toolchain tadi. Proses ini diperlukan untuk memastikan agar seluruh paket telah dikompilasi dengan toolchain baru, termasuk toolchain itu sendiri.

Daftar Kode 3.6: Membangun-ulang system dan world

# emerge -e system
# emerge -e world

Pada saat ini anda dapat dengan aman membuang GCC versi lama:

Daftar Kode 3.7: Pembersihan

# emerge -aC =sys-devel/gcc-3.3*

4.  Upgrade GCC pada Instalasi Pertama

Pendahuluan

Upgrade GCC pada sebuah sistem selepas instalasi dari tarbal stage3 merupakan proses sederhana. Salah satu kelebihan yang didapatkan oleh para pengguna dengan instalasi baru ialah, mereka belum memiliki paket-paket yang terkait kepada GCC versi lama. Contoh berikut ini merupakan upgrade dari GCC-3.3 ke 3.4 atau yang lebih baru. Beberapa bagian mungkin akan berbeda jika anda melakukan upgrade dari GCC versi lain. Sebagai contoh, nama pustaka yang digunakan oleh revdep-rebuild di bawah ini hanya dimiliki oleh GCC 3.3, seperti halnya dengan instalasi libstdc++-v3.

Jika seorang user belum pernah melakukan kustomisasi pada sistemnya, maka hanya ada sedikit langkah yang perlu dijalankan untuk menyelesaikan proses upgrade GCC ke versi terbaru. Untuk upgrade GCC-3.3 ke 3.4 upgrade, terdapat beberapa pilihan. Tetapi, tidak seperti upgrade GCC-3.3 ke 3.4, yang satu ini lebih mudah karena perbedaan di antara metode-metode yang ada lebih sedikit. Metode pertama lebih cepat dan memerlukan penggunaan utilitas revdep-rebuild dari paket gentoolkit, mirip dengan prosedur di atas. Dengan menggunakan revdep-rebuild, hanya paket-paket yang terkait langsung dengan pustaka GCC saja yang akan dibangun-ulang, sedangkan metode ke dua akan menyebabkan seluruh instalasi baru anda dikompilasi-ulang dengan versi GCC terbaru dan memerlukan waktu yang lebih lama. Metode ke dua ini tidak pernah diperlukan dan didokumentasikan hanya sebagai pelengkap.

Langkah-langkah pertama berikut ini sama untuk kedua metode, dan harus dijalankan.

Daftar Kode 4.1: Upgrade GCC

# emerge -uav gcc
(Gantikan "i686-pc-linux-gnu-3.4.5" dengan versi GCC dan setting
CHOST yang baru saja anda instal)
# gcc-config i686-pc-linux-gnu-3.4.5
# source /etc/profile

(Membangun-ulang libtool)
# emerge --oneshot -av libtool

Untuk menyediakan kompatibilitas dengan aplikasi binari C++ lama, anda perlu menginstal sys-libs/libstdc++-v3.

Daftar Kode 4.2: Instalasi libstdc++-v3

# emerge --oneshot sys-libs/libstdc++-v3

Menggunakan revdep-rebuild

Metode ini mengharuskan anda menginstal gentoolkit jika anda belum memilikinya. Selanjutnya kita akan menjalankan revdep-rebuild untuk memeriksa paket-paket yang perlu dibangun-ulang, kemudian membangun-ulangnya.

Daftar Kode 4.3: Instalasi gentoolkit dan Menjalankan revdep-rebuild

# emerge -an gentoolkit
# revdep-rebuild --library libstdc++.so.5 -- -p -v
# revdep-rebuild --library libstdc++.so.5

Catatan: Anda mungkin akan mendapatkan masalah dengan versi-versi paket tertentu karena telah usang atau telah di-mask. Jika memang begini, anda perlu menambahkan opsi --package-names pada perintah revdep-rebuild. Opsi ini akan mengkompilasi paket-paket berdasarkan namanya saja, bukan nama dan versi.

Menggunakan emerge -e

Metode ini, walaupun memakan waktu lebih lama, akan membangun-ulang seluruh sistem anda untuk memastikan bahwa semuanya telah dibangun dengan compiler terbaru anda. Proses ini tidak diperlukan, tetapi boleh dilakukan jika anda melakukan perubahan pada variabel CFLAGS atau yang lainnya di make.conf, yang dapat berpengaruh pada kompilasi sistem.

Karena kita menjalankan upgrade pada instalasi awal, kita tidak perlu mengkompilasi-ulang world. Tetapi, anda juga dapat memilih untuk meng-update world sebagai ganti system untuk memastikan agar semua paket ter-update.

Daftar Kode 4.4: Membangun-ulang system

# emerge -e system

Pembersihan

Pada saat ini anda dapat membuang GCC versi lama dengan aman. Gantikan VERSI_GCC_BARU_ANDA dengan versi yang baru saja anda instal:

Daftar Kode 4.5: Pembersihan

# emerge -aC "<sys-devel/gcc-VERSI_GCC_BARU_ANDA"

5.  Kesalahan Umum

Anda perlu menonaktifkan distcc selama proses upgrade. Mencampur versi compiler pada nodes anda akan mengakibatkan masalah. Hal ini tidak berlaku untuk ccache, karena obyek cache akan menjadi tidak valid lagi.

Selalu gunakan versi GCC yang sama untuk kernel dan modul-modul kernel anda. Ketika anda telah membangun-ulang world anda dengan GCC baru, modul-modul eksternal (mis. app-emulation/qemu-softmmu) tidak akan dapat di-load. Bangun-ulang kernel anda dengan GCC baru untuk memperbaikinya.

Jika anda menjalankan upgrade pada komputer SPARC, pastikan agar anda kembali menjalankan silo -f setelah selesai membangun-ulang world untuk menghindari masalah-masalah yang mungkin terjadi.

Pesan-pesan Error

Jika anda mendapatkan error libtool: link: `/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/libstdc++.la' is not a valid libtool archive, jalankan /sbin/fix_libtool_files.sh 3.3.6 (gantikan "3.3.6" dengan nomor versi dari pesan error).

Jika anda melihat pesan error: /usr/bin/gcc-config: line 632: /etc/env.d/gcc/i686-pc-linux-gnu-3.3.5: No such file or directory, maka cobalah untuk menghapus /etc/env.d/gcc/config-i686-pc-linux-gnu lalu jalankan lagi gcc-config, diikuti dengan source /etc/profile. Tetapi hanya lakukan ini jika anda tidak memiliki cross-compilers.

Jika sebuah paket gagal ketika anda menjalankan emerge -e system atau emerge -e world, anda dapat melanjutkan dengan emerge --resume. Jika sebuah paket gagal berulang-kali, lewati paket tersebut dengan emerge --resume --skipfirst. Jangan jalankan perintah emerge lain secara bersamaan atau anda akan kehilangan informasi resume.

Jika anda mendapatkan pesan error spec failure: unrecognized spec option ketika meng-upgrade compiler anda, cobalah untuk berpindah kembali ke compiler default anda, unset variabel GCC_SPECS lalu jalankan lagi upgrade GCC:

Daftar Kode 5.1: Mengambalikan spec primari

# gcc-config 1
# source /etc/profile
# unset GCC_SPECS
# emerge -uav gcc


Print

Diperbarui 3 April 2007

Versi asli dari dokumen ini terakhir diupdate 15 Oktober 2011

Rangkuman: Dokumen ini akan memandu anda dalam proses upgrade GCC pada sistem Gentoo Linux anda.

Wernfried Haas
Author

Jan Kundrát
Author

Mark Loeser
Editor

Dzikri Aziz
Translator

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.