Apakah kompilasi silang linux

青灯夜游
Lepaskan: 2022-04-29 18:57:12
asal
5095 orang telah melayarinya

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.

Apakah kompilasi silang linux

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);
  • Mengapa menggunakan kompilasi silang? Terdapat dua sebab utama:
Sistem sasaran untuk kompilasi silang secara amnya mempunyai memori yang kecil, lemah atau bahkan tiada peralatan paparan dan tiada keupayaan untuk menyusun secara setempat padanya ;

Seni bina CPU atau sistem pengendalian platform yang mampu menyusun kod sumber adalah berbeza daripada platform sasaran
  • Kompilasi silang rantai alat adalah perlu untuk penyusunan silang Ia adalah alat yang sangat diperlukan dan kemahiran yang mesti dikuasai oleh pembangun tertanam.
  • Mengapa penyusunan silang sukar?

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.
  • Penjajaran - Sesetengah platform (seperti lengan) hanya boleh membaca atau menulis integer daripada alamat yang berbilang genap 4 bait, jika tidak, segfault akan berlaku. Pemprosesan mana-mana data yang sejajar dan tidak sejajar adalah lebih perlahan, dan pengkompil biasanya mengisi pembolehubah penjajaran struktur. Merawat struktur sebagai blok data yang boleh dihantar ke cakera atau melalui rangkaian memerlukan kerja tambahan untuk memastikan perwakilan yang konsisten.
  • Tandatangan lalai - jenis data "char", lalai kepada yang ditandatangani atau tidak ditandatangani, berbeza dari platform ke platform (dari pengkompil kepada pengkompil), membawa kepada beberapa pepijat yang sangat mengejutkan . Penyelesaian mudah ialah menyediakan parameter pengkompil seperti "-funsigned-char" untuk memaksa lalai kepada nilai yang diketahui.
  • NOMMU - Jika platform sasaran tidak mempunyai unit pengurusan memori, beberapa perkara perlu diubah. Memerlukan vfork(), bukan fork(), hanya jenis mmap() tertentu yang berfungsi (kongsi atau baca sahaja, tetapi bukan salin atas tulis), timbunan tidak berkembang secara dinamik.
  • Kebanyakan pakej bertujuan untuk mudah alih apabila disusun secara tempatan dan sekurang-kurangnya akan menerima patch yang membetulkan mana-mana isu di atas (kecuali isu NOMMU) yang diserahkan kepada senarai mel pembangunan yang sesuai.
  • 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. Apakah kompilasi silang linux

  • 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.

  • Apakah kompilasi silang linux

    • 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.

    Apakah kompilasi silang linux

    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!

    Label berkaitan:
    sumber:php.cn
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan