Saya mencoba menginstal Ruby di direktori home saya di server Linux (tanpa akses root), yang tentu saja memerlukan penggunaan gcc
. Hal terdekat yang dapat saya temukan adalah direktori dengan nama itu yang (jika Anda cukup dalam) berisi cc1
:
>: find / -iname gcc 2> /dev/null
/usr/libexec/gcc
>: tree -if /usr/libexec/gcc
/usr/libexec/gcc
/usr/libexec/gcc/x86_64-redhat-linux
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1/cc1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.2 -> 4.1.1
Fakta bahwa pengalihan CC1 ke GCC di Wikipedia tampaknya menyiratkan sesuatu yang dekat dengan identitas, namun tidak ada penyebutan lain tentang CC1 di halaman GCC selain catatan tentang pengalihan, dan Googling belum memberi saya sesuatu yang berguna, dan upaya saya untuk menggunakan cc1
di tempat gcc
telah gagal.
Apa sebenarnya hubungan di antara mereka? Dan apakah itu memberi saya harapan untuk mengkompilasi Ruby di mesin ini?
cc1
file dengan#include
dan#define
arahangcc
adalah nama suitecc
hanya kompiler C dari suite ini.kata
cc
itu juga nama generik untuk setiap c compiler yang diberikan di bawah sistem unix, misalnya tidak jarang menemukan variabel lingkungan yang disebutCC
dalam skrip bangunan yang diberikan atau mengkonfigurasi skrip, dan jika Anda ingin menjadi bertele-tele, variabel ini biasanya menunjuk ke ac kompiler yang tidak selalu melakukan penautan objek yang dikompilasi, itu biasanya digunakan untuk merujuk ke kompiler yang "hanya" dikompilasi.cc
fromgcc
is, bagaimanapun, dapat menghasilkan executable yang sudah selesai sehingga dapat melakukan langkah terakhir ini dengan linkernya juga.kata
cc1
yang sering kali digunakan "secara internal" atau ketika membaca dokumen GNU ( contoh ), kata ini juga digunakan untuk menamai pustaka terkait gcc berdasarkan bahasa atau kompiler yang dimiliki (dalam hal ini cc1 = milik c compiler).Infact jika Anda bertanya
gcc
apa arti kata itucc1
seharusnya menjawab dengan path untuk pustaka untuk kompiler cc, jadi Anda mencoba untuk mengeksekusi sesuatu yang merupakan pustaka dan bukan dieksekusi nyata.
jauh lebih mudah untuk mengingat CC sebagai c compiler dan menyederhanakan segalanya, melewati cc1 ini, Anda tidak perlu tahu bagaimana hal-hal bekerja secara internal kecuali jika Anda ingin memulai perjalanan panjang.
sumber
Seperti yang disebutkan lainnya,
gcc
menggunakancc1
.Cara yang tepat di mana
cc1
dan sub-program lainnya seperticpp
danld
dipanggil dilakukan ditentukan oleh format file spesifikasi .File spec saat ini dapat dilihat dengan:
Bagian yang relevan tampaknya adalah:
Dan Anda dapat menggunakan file spesifikasi Anda sendiri dengan:
Tentu saja, opsi baris perintah yang diteruskan ke GCC secara tidak langsung mengubah bagaimana sub-proses dipanggil. Tetapi memanipulasi file spek memberi Anda fleksibilitas yang lebih besar dan memungkinkan Anda melakukan hal-hal yang tidak bisa dilakukan opsi command line, misalnya /programming/7493620/inhibit-default-library-paths-with-gcc
Anda dapat mengamati apa yang sedang dijalankan dengan mudah:
Output sampel:
sumber
cc1
adalah preprocessor dan kompiler, yang inputnya adalah kode sumber C dan output adalah kode assembly.Anda dapat melihat
cc1
adalah salah satu perintah yang dipanggil (yang pertama, sebenarnya) dengan mengeluarkan (sintaks tergantung pada versi):gcc-8 -v SOMESOURCE.c
sumber