Cross compilation
- Rust kursu
- Uzman
- Ders 38/46
- 4 dk
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
fn main() {
// buraya yaz
}Örnek çözüm
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
$ rustup target ____ aarch64-unknown-linux-gnu
$ 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 |