Bagaimana saya bisa mendapatkan kompiler C statis?

8

Saya bermain-main dengan lingkungan chroot, dan saya ingin memiliki kompiler C portabel sehingga saya dapat dengan mudah mengatur beberapa alat build dasar di setiap lingkungan tanpa harus memindahkan terlalu banyak perpustakaan di sekitar.

Gcc tampaknya cukup menarik untuk apa yang ingin saya lakukan, tetapi jika cukup mudah untuk membangun gcc statis, saya tidak akan keberatan beberapa lusin megabita.

Saya juga melihat Tiny C Compiler, yang lebih kecil tetapi masih terlihat seperti memiliki serangkaian fitur yang mengesankan. Namun, menjalankan ./configure --help di direktori sumber tidak mencantumkan opsi apa pun untuk membangun tcc secara statis, dan saya tidak yakin bagaimana hal itu dilakukan.

math4tots
sumber
Untuk menjawab masalah sekunder, penggunaan memori, berikut adalah beberapa solusi: Anda dapat membuat direktori bayangan yang hanya berisi tautan keras ke GCC; Anda dapat menggunakan wadah buruh pelabuhan (wadah lebih aman daripada chroot, dan buruh pelabuhan menyediakan sistem file gabungan, yang akan memungkinkan Anda menghemat memori).
ctrl-alt-delor

Jawaban:

1

Membangun biner statis harus sesederhana menjalankan gcc dengan -static, atau jika ld dipanggil langsung menggunakan -Bstatic. Mencoba

CFLAGS=-static make

setelah berlari configure. Jika gagal, hasilnya akan jelas, misalnya rakit referensi yang tidak ditentukan pada waktu tautan.

Kyle Jones
sumber
1
Saya mencoba make CFLAGS=-staticbarusan. Buat cetakan peringatan tentang dlopen, maka ketika saya mencoba menjalankan executable di lingkungan chroot, saya /usr/lib/crt1.o .. crti,o .. crtn.otidak menemukan kesalahan. Apakah itu yang Anda maksud dengan "referensi tidak terdefinisi pada waktu tautan"?
math4tots
Kesalahan yang saya perkirakan disebabkan oleh hilangnya versi statis perpustakaan, seperti crt1.o, tetapi linker akan langsung mengeluh. Jika Anda melihat kesalahan saat runtime, maka biner tidak terhubung secara statis.
Kyle Jones
Saya pikir Anda salah memahami pertanyaan: math4tots menginginkan kompiler C yang berfungsi sebagai biner mandiri (atau setidaknya sebagai kumpulan file yang mudah diidentifikasi), bukan kompiler C yang menghasilkan biner mandiri.
Gilles 'SO- stop being evil'
1
Ya aku mengerti itu. Memproduksi kompiler yang terhubung secara statis adalah langkah pertama yang perlu, dan salah satu pertanyaan yang sepertinya ditanyakan.
Kyle Jones
1
@Gilles Cara terbaik untuk mendapatkan kompiler C sebagai biner mandiri adalah dengan membuatnya dari sumber menggunakan kompiler yang sudah Anda miliki.
OrangeDog
3

Anda juga dapat mengambil versi yang dikompilasi dengan static-get

static-get -x gcc
Javier López
sumber