CodeBlanks Logo Icon CodeBlanks

Cross compilation

cross aracı ile çapraz derleme yapmayı öğrenirsin.

Cross compilation

Rust bir makinede başka bir platform için derleyebilir. Hedef bir üçlü ile adlandırılır: mimari-üretici-sistem-abi. Standart kütüphane hedef için indirilir; bağlama için uygun bir bağlayıcı gerekir:

$ rustup target add aarch64-unknown-linux-gnu
$ cargo build --release --target aarch64-unknown-linux-gnu

# .cargo/config.toml
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"

cross aracı, gereken bağlayıcı ve kütüphaneleri hazır içeren kapsayıcılarla bu işi tek komuta indirir.

Hedefe göre kod

Kod, cfg ile hedefin özelliklerine bakabilir:

#[cfg(target_os = "windows")]
const AYRAC: char = '\\';
#[cfg(not(target_os = "windows"))]
const AYRAC: char = '/';

println!("{}", usize::BITS);                         // 64 bit sistemde 64
println!("{}", cfg!(target_pointer_width = "64"));   // true
println!("{}", std::env::consts::OS);               // "linux", "windows", ..

rustc --print cfg --target <üçlü> bir hedefin tüm cfg değerlerini listeler.

Uygulama Hedef bilgisi

usize::BITS ve cfg!(target_pointer_width = "64") değerlerini boşlukla yazdır (64 bit alıştırma ortamı).

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn main() {
    println!("{} {}", usize::BITS, cfg!(target_pointer_width = "64"));
}

Beklenen çıktı

64 true

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>x86_64-unknown-linux-musl</code> hedefinin avantajı nedir?

  • Avantajı yok
  • Tamamen statik bağlı, glibc sürümüne bağımlı olmayan ikili üretir Doğru cevap
  • Daha hızlıdır her zaman
  • Windows'ta çalışır

Açıklama: Tek dosyalık dağıtım ve küçük kapsayıcılar için sık tercih edilir.

2 Hedef ekle

Soru
$ rustup target ____ aarch64-unknown-linux-gnu
Cevap
$ rustup target add aarch64-unknown-linux-gnu

Açıklama: rustup target add bir hedefin standart kütüphanesini indirir.

3 Üçlü ve platform

Kavram Anlamı
x86_64-pc-windows-msvc Windows
aarch64-apple-darwin Apple Silicon macOS
x86_64-unknown-linux-musl Statik Linux
wasm32-unknown-unknown WebAssembly

Uzman bölümündeki tüm dersler