Dalam Linux, kompilasi silang merujuk kepada penjanaan kod boleh laku pada satu platform pada platform lain, iaitu platform untuk menyusun kod sumber dan platform untuk melaksanakan atur cara yang disusun bagi kod sumber ialah dua platform berbeza . Sebab untuk menggunakan kompilasi silang: 1. Sistem sasaran tidak mempunyai keupayaan untuk menyusun secara asli padanya 2. Platform yang mampu menyusun kod sumber adalah berbeza daripada platform sasaran.
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.
Kompilasi silang
Apa yang dipanggil "kompilasi silang (Cross_Compile)" merujuk kepada platform untuk menyusun kod sumber dan pelaksanaan program selepas kod sumber disusun Platform adalah dua platform yang berbeza. Contohnya, di bawah platform seni bina/Linux (Ubuntu) Intel x86, fail boleh laku yang dijana menggunakan rantai alat kompilasi silang dijalankan di bawah seni bina ARM/Linux.
Ringkasnya, ia adalah untuk menjana kod boleh laku pada satu platform pada platform lain. Seni bina yang sama boleh menjalankan sistem pengendalian yang berbeza, sistem pengendalian yang sama juga boleh berjalan pada seni bina yang berbeza.
Kompilasi silang agak rumit, dan isu berikut mesti dipertimbangkan:
Seni bina CPU: seperti ARM, x86, MIPS, dsb.;
Endianness: big-endian dan little-endian; >
Antara Muka Binari Aplikasi (ABI);Seni bina CPU atau sistem pengendalian platform yang mampu menyusun kod sumber adalah berbeza daripada platform sasaran
Kompilasi asli mudah alih adalah sukar. Kebanyakan program dibangunkan pada perkakasan x86 dan disusun secara asli. Penyusunan silang boleh menghadapi dua jenis masalah: masalah dengan program itu sendiri dan masalah dengan sistem binaan.
Kategori pertama isu mempengaruhi semua sasaran bukan x86, termasuk asli dan binaan silang. Kebanyakan program membuat andaian tentang jenis mesin yang mereka jalankan, yang mesti sepadan dengan platform yang berkaitan, jika tidak, program itu tidak akan berjalan. Andaian biasa termasuk:Saiz perkataan - menyalin penunjuk ke int mungkin kehilangan data pada platform 64-bit, tentukan saiz malloc dengan mendarab dengan 4 dan bukannya saiz(panjang) tidak bagus. Limpahan integer membawa kepada kelemahan keselamatan yang halus, seperti "jika (x y Endianness - Sistem yang berbeza menyimpan data binari secara dalaman dengan cara yang berbeza dan membaca data int atau apungan daripada cakera atau rangkaian mungkin memerlukan penukaran.
Kemudian kompilasi silang.
Selain isu dengan kompilasi asli, penyusunan silang mempunyai set isu tersendiri:
Konfigurasi Masalah - Pakej yang mempunyai langkah konfigurasi yang berasingan (bahagian "./configure" pada pemasangan konfigurasi/make/make standard), yang biasanya menguji perkara seperti endian atau saiz halaman, adalah mudah alih apabila disusun secara asli. Apabila menyusun silang, nilai ini berbeza antara sistem hos dan sistem sasaran, dan menjalankan ujian pada sistem hos memberikan jawapan yang salah. Apabila sasaran tidak mempunyai pakej perisian atau versi tidak serasi, konfigurasi mengesan sama ada terdapat sokongan pakej perisian pada hos.
HOSTCC lwn TARGETCC - Proses binaan memerlukan kompilasi untuk dijalankan pada sistem hos, seperti yang dikonfigurasikan di atas untuk ujian atau program yang menjana kod (seperti program C yang mencipta fail .h, #disertakan semasa binaan utama) . Gantikan pengkompil hos dengan pengkompil sasaran, memecahkan perpustakaan masa jalan semasa proses binaan. Pustaka sedemikian memerlukan akses kepada hos dan penyusun sasaran dan perlu dinyatakan bila hendak menggunakannya.
Kebocoran rantai alat - rantai alat kompilasi silang yang dikonfigurasikan dengan buruk yang membocorkan beberapa kandungan sistem hos ke dalam atur cara yang disusun, menyebabkan kegagalan yang selalunya mudah dikesan, tetapi sukar untuk didiagnosis dan betul. Rantaian alat mungkin #termasuk fail pengepala yang salah atau mencari laluan perpustakaan yang salah semasa memaut. Perpustakaan kongsi selalunya bergantung pada perpustakaan kongsi lain, yang berpotensi menyelinap dalam rujukan masa pautan yang tidak dijangka kepada sistem hos.
Perpustakaan - Program yang dipautkan secara dinamik mesti mengakses perpustakaan kongsi yang sesuai pada masa penyusunan. Pustaka kongsi sistem sasaran perlu ditambahkan pada rantai alat kompilasi silang supaya program boleh memautkannya.
Pengujian - Pada binaan asli, sistem pembangunan menyediakan persekitaran ujian yang mudah. Apabila menyusun silang, mengesahkan bahawa "hello world" berjaya dibina mungkin memerlukan konfigurasi (sekurang-kurangnya) pemuat but, kernel, sistem fail akar dan perpustakaan kongsi.
Nota Kaki 1: Perbezaan paling ketara antara jenis komputer ialah pemproses yang melaksanakan program, perbezaan lain termasuk perpustakaan ABI (seperti glibc lwn. uClibc), mesin dengan endian boleh dikonfigurasikan (arm vs. armeb), atau mesin dengan mod berbeza yang boleh menjalankan kod 32-bit dan 64-bit (seperti x86-64 pada x86).
Nota Kaki 2: Apabila membina penyusun, jenis ketiga dipanggil "Canadian cross", penyusun silang yang tidak berjalan pada sistem hos. Canadian Cross-Build pengkompil yang berjalan pada satu platform sasaran dan menjana kod pada mesin sasaran yang lain. Mula-mula buat pengkompil silang sementara daripada hos ke sasaran pertama dan sebagai sasaran kedua bina pengkompil silang lain untuk membina pengkompil luaran sedemikian. Sasaran pengkompil silang pertama menjadi mesin hos di mana pengkompil baharu akan dijalankan, dan sasaran kedua ialah platform di mana pengkompil baharu akan menjana output. Teknik ini sering digunakan untuk menyusun silang pengkompil asli baharu untuk platform sasaran.
Nota Kaki 3: Sistem desktop moden cukup pantas sehingga meniru sasaran yang disusun secara asli di bawah emulator sebenarnya merupakan strategi yang berdaya maju. Jauh lebih perlahan daripada penyusunan silang, memerlukan mencari atau menjana persekitaran binaan asli untuk sasaran (penyusun silang mesti disediakan juga), mungkin ranap disebabkan perbezaan antara emulator dan perkakasan sebenar untuk digunakan.
Nota Kaki 4: Rantai alat kompilasi silang cenderung untuk memberi awalan kepada nama utiliti mereka, ala "armv5l-linux-gcc". Jika hanya dipanggil "gcc", hos dan penyusun asli tidak boleh berada dalam $PATH pada masa yang sama.
Cadangan berkaitan: "Tutorial Video Linux"
Atas ialah kandungan terperinci Apakah kompilasi silang linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!