Bagaimana cara menginstal versi spesifik GCC di Kali Linux?

8

Pertanyaan ini tampaknya ditangani dengan baik di beberapa pertanyaan dan tempat lain yang mudah ditemukan dengan Google, tetapi saya tidak menemukan solusi yang memuaskan karena alasan yang dijelaskan di bawah ini. Tetapi hanya untuk penyelesaian, saya telah memasukkan beberapa tautan yang relevan:

/ubuntu/138284/how-to-downgrade-a-package-via-apt-get /ubuntu/428772/how-to-install-specific-version-of -some-package / 428778 /ubuntu/26498/choose-gcc-and-g-version ...

Dan lain-lain.

Namun, pertanyaan ini adalah tentang menginstal versi GCC yang sangat spesifik di Kali Linux, yang tampaknya tidak tersedia sebagai paket tertentu. Secara khusus, pertanyaannya adalah tentang cara menginstal versi 6.3.0, karena saya memerlukan versi ini untuk mengkompilasi program tertentu: https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/

(sebagai pertanyaan bonus, jika ada cara yang lebih waras untuk memperbaiki masalah khusus ini tanpa menggunakan versi GCC yang berbeda, jangan ragu untuk menjawab, tapi saya yakin pertanyaan ini bersifat umum dan saya ingin tahu bagaimana melakukannya terlepas dari cara membuat tautan program yang disebutkan di atas dengan benar)

Versi yang tersedia untuk menginstal paket apa pun, misalnya gcc, dapat ditentukan dengan:

apt-cache showpkg gcc

Yang akan mencantumkan versi yang tersedia di bawah "versi:", mis

4:7.2.0-1d1
4:4.9.2-2

Instalasi kemudian sesederhana mengeluarkan

apt-get install gcc:4:4.9.2-2

Ini akan menginstal versi yang lebih lama 4: 4.9.2-2, hanya dengan (saya percaya) menimpa instalasi 7.2.0-1d1, jika ada.

Untuk mendapatkan versi 4: 4.9.2-2 tersedia sama sekali, saya harus menambahkan deb http://old.kali.org/kali sana main non-free contribke /etc/apt/sources.listfile saya dan kemudian jalankan apt-get update.

Namun, bagaimana jika versi yang saya butuhkan tidak tercantum?

Saya telah bereksperimen dengan berbagai sumber, misalnya yang ditemukan di sini: http://snapshot.debian.org/ dan di berbagai pertanyaan dan situs web lain dari pencarian Google.

Sebagian besar dari mereka memberi saya abaikan atau kesalahan, misalnya sebagai berikut

Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease

Bahkan jika ini akan berhasil, tampaknya pendekatan yang sangat buruk untuk menginstal versi tertentu, karena menambahkan beberapa sumber sewenang-wenang mungkin tidak memiliki versi tertentu yang saya inginkan.

Jika saya mencari di snapshot.debian.org untuk gcc, saya hanya mendapatkan versi yang sangat lama: http://snapshot.debian.org/package/gcc/

Saya akhirnya menjadi frustrasi dengan pendekatan ini dan mengkompilasi GCC 6.3.0 dari tarball sumber. Kompilasi berhasil, tetapi kemudian saya dihadapkan dengan cara menginstalnya. Saya berhati-hati menjalankan make installkarena saya khawatir itu akan merusak aptdan dpkgdan mungkin merusak sistem.

Sebagai gantinya, saya mencoba menjalankannya dari direktori build, secara langsung. Saya mencoba untuk menambahkan direktori build sebagai entri pertama di PATH saya, yang tidak berfungsi. Kemudian, saya mencoba untuk mengubah nama /usr/bin/gccdan melakukan symlink dari /usr/bin/gcctempat gcc-6.3.0 saya dapat dieksekusi Ini menyajikan masalah berikut:

cc: error trying to exec 'cc1': execvp: No such file or directory, which

Ini diperbaiki dengan entri lain di PATH saya.

Lalu, saya mendapatkan kesalahan ini:

/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory

Yang saya asumsikan adalah karena entri yang hilang di /usr/lib/gcc/x86_64-linux-gnu. Saya mencoba membuat symlink dari 6 ke 6.3.0, tetapi ini tidak cukup. Saya juga mencoba untuk benar-benar menyalin semuanya dengan cp -Rhasil yang sama.

Ini harus menjadi program 64-bit, tapi saya juga menganggapnya sama /usr/lib/gcc/i686-linux-gnu.

Saya yakin saya bisa mulai melakukan straceuntuk melihat di mana ia mencoba untuk membuka file dari, membaca file log, membaca sumbernya, dan akhirnya saya membayangkan saya bisa mencari cara untuk meretas bersama solusi yang dikandung dengan buruk. Tapi alangkah baiknya jika seseorang bisa memberi tahu saya bagaimana melakukan ini dengan cara yang waras.

AlphaCentauri
sumber
Ini tidak mengurangi manfaat umum dari pertanyaan Anda; tapi saat rilis dari XMRig harus membangun dengan baik dengan GCC 7, sehingga Anda hanya harus mampu membangun tanpa main-main dengan GCC 6.3.
Stephen Kitt
Anda selalu dapat mengkompilasi GCC (versi yang tidak terlalu kuno) dari kode sumbernya , karena ini adalah perangkat lunak gratis. Berhati-hatilah saat mengonfigurasinya, dan bangun di luar pohon sumbernya.
Basile Starynkevitch

Jawaban:

10

Bagaimana cara menginstal versi spesifik GCC di Kali Linux?

GCC 6 tersedia di kali linux dapat diinstal sebagai berikut:

apt install g++-6 gcc-6

Untuk beralih antara gcc6 dan gcc7

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1 --slave /usr/bin/g++ g++ /usr/bin/g++-7
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 2 --slave /usr/bin/g++ g++ /usr/bin/g++-6
update-alternatives --config gcc

output sampel:

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path            Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-6   2         auto mode
  1            /usr/bin/gcc-6   2         manual mode
  2            /usr/bin/gcc-7   1         manual mode

Press <enter> to keep the current choice[*], or type selection number:

Pilih gccversi default Anda .

pada 2017-08-05 versi gcc-6 ditingkatkan dari 6.3.0menjadi 6.4.0.

Menginstal xmrigmengikuti instruksi build .

apt-get install git build-essential cmake libuv1-dev libmicrohttpd-dev
git clone https://github.com/xmrig/xmrig.git
cd xmrig
mkdir build
cd build
cmake ..
make

Membangun versi gcc tertentu 6.3.0

Unduh tarball dari cermin terdekat : Rilis GCC

wget https://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2
tar xvf gcc-6.3.0.tar.gz
cd gcc-6.3.0
apt build-dep gcc
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-6.3.0/configure --prefix=/usr/bin/gcc-6.3 --enable-languages=c,c++,fortran,go --disable-multilib
make -j 8
make install

Tambahkan gcc-6.3keupdate-alternatives

Penting : --disable-multilibOpsi diperlukan untuk mengonfigurasi dan membangun gccuntuk arsitektur saat ini.

GCC WIKI: Memasang GCC

GAD3R
sumber
1
Maafkan saya, tetapi tidakkah ini menginstal versi GCC apa pun yang disediakan "gcc-6"? Bagaimana jika saya ingin menginstal secara khusus 6.3.0?
AlphaCentauri
@AlphaCentauri 6 bulan lalu versi gcc6 yang tersedia adalah 6.3.0, sekarang versi gcc6 ditingkatkan ke 6.4.0.
GAD3R
1
@AlphaCentauri menjawab diperbarui termasuk langkah-langkah pembangunan.
GAD3R
1
  1. Pertama, Anda harus mengunjungi situs web ini: http://gcc.gnu.org/mirrors.html
  2. Kemudian pilih rilis lama dan Anda akan melihat versi yang berbeda.
  3. Sekarang Anda harus mengklik salah satu yang ingin Anda miliki dan unduhan akan dimulai.

  4. Akhirnya, Anda harus mengkompilasi dan menginstal dari sumber: /ubuntu/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file

Prashant Luhar
sumber
1
Terima kasih, tapi saya tidak percaya Anda sudah membaca seluruh pertanyaan saya. Saya menunjukkan bagaimana saya telah mencoba untuk mengkompilasi dari sumber. Masalah dengan ini (seperti yang ditunjukkan dalam pertanyaan saya), adalah melakukan "make install" pada GCC mungkin bukan ide yang baik karena mungkin dapat merusak sistem. Lebih jauh lagi, hanya menjalankan GCC tanpa melakukan instalasi memperkenalkan tantangannya sendiri, yang juga telah saya uraikan dalam pertanyaan awal saya.
AlphaCentauri
Anda telah menyatakan dalam pertanyaan Anda yang make installmungkin merusak dpkgatau apt.. dapatkah Anda menguraikan! @AlphaCentauri
Prashant Luhar
0

Jika Anda melakukan standar ./configure; maketanpa melewati opsi apa pun configure, maka make installakan menempatkan potongan versi GCC yang Anda inginkan di berbagai subdirektori dari /usr/local.

The /usr/localpohon direktori ditujukan untuk perangkat lunak yang diinstal oleh luar sistem administrator sistem paket-manajemen (yaitu. Apa yang Anda lakukan). Dengan demikian, perangkat lunak yang diinstal tidak akan merusak perangkat lunak yang dikemas kecuali dalam keadaan yang sangat tidak biasa.

GCC khususnya dirancang dengan asumsi bahwa Anda akan menginstal banyak versi. Cukup banyak membutuhkan tindakan aktif pada bagian Anda untuk memecahkan apa pun (misalnya dengan mencampur dan mencocokkan potongan untuk mencoba membuat versi hybrid).

Menandai
sumber
Anda seharusnya tidak (dan mungkin tidak akan berhasil) membangun GCC di pohon sumbernya. Dan Anda mungkin ingin opsi tambahan untuk configureskripnya (mis. Beberapa -program-suffix=dll)
Basile Starynkevitch
0

Saya akhirnya menjadi frustrasi dengan pendekatan ini dan mengkompilasi GCC 6.3.0 dari tarball sumber. Kompilasi berhasil,

Pertama, saya akan merekomendasikan, jika Anda mengkompilasi GCC dari sumbernya, untuk memilih versi yang lebih baru (misalnya GCC 7 di akhir 2017).

Kemudian, pastikan untuk membangun GCC di luar pohon sumbernya dan untuk mencoba configureskripnya terlebih dahulu dengan --helpdan untuk memberikan lebih banyak opsi keconfigure . Baca hati-hati dalam instalasi GCC petunjuk dan memahami peran autoconf .

Dalam praktiknya, saya sarankan

  • jalankan /usr/bin/gcc -vuntuk memahami bagaimana GCC sistem Anda telah dikonfigurasi

  • jalankan apt-get build-dep gcc-6(atau serupa) untuk mendapatkan dependensi GCC sistem terbaru

  • buat direktori bangunan di luar pohon sumber GCC Anda, dan jalankan lebih jauh .../configure(ganti ...dengan jalur relatif yang sesuai, misalnya ../gcc-7.2/) dan di makesana.

  • Anda mungkin ingin memberikan setidaknya --program-suffix=-mineitu configure( -minedapat diganti dengan akhiran lain) dan Anda bahkan dapat menambahkan --prefix=$HOME/soft/jika Anda tidak memiliki akses root. Anda mungkin ingin opsi tambahan untuk configuredan Anda harus memilih dan memberi mereka dengan hati-hati.

  • kemudian nanti make install(Anda bahkan dapat menjalankan tanpa menjadi root make install DESTDIR=/tmp/gccinst/dan kemudian menyalin dengan hati-hati dan secara rekursif sebagai root yang /tmp/gccinst/....) akan menginstal hal-hal di /usr/local/bin/gcc-minedll .... (atau $HOME/soft/bin/gcc-mine....) sehingga tidak akan merusak sistem file yang diinstal sistem .

Perhatikan bahwa FHS mengharuskan sistem manajemen paket untuk pergi sendiri /usr/local/(yang merupakan standar --prefixuntuk GCC configure)

Basile Starynkevitch
sumber
OP sudah memiliki GCC 7, tetapi sedang mencari 6.3.0 mengikuti komentar reddit yang salah kaprah.
Stephen Kitt
0

Anda juga dapat menggunakan toolchain yang telah dikompilasi atau yang ini untuk arsitektur spesifik Anda (x86_64, glibc, gcc 6.3).

Tentu saja opsi selanjutnya adalah menggunakan rootfs-builder seperti buildroot atau yocto
untuk menghasilkan toolchain dengan versi gcc specfic Anda.

Christian Stenzel
sumber