DynamicLibrary
- Dart kursu
- Uzman
- Ders 14/47
- 5 dk
DynamicLibrary ile native yükleme öğrenirsin.
DynamicLibrary
DynamicLibrary, dart:ffi ile C kütüphanelerini Dart tarafında temsil eden sınıftır. Bir kütüphane DynamicLibrary.open('libmylib.so') ile dosyadan, DynamicLibrary.process() ile süreçten, DynamicLibrary.executable() ile çalıştırılabilir dosyadan yüklenir.
Açılan kütüphane bir handle'dır; üzerinden lookupFunction ile semboller (fonksiyonlar) aranır. Kütüphane yüklenemezse ArgumentError fırlatılır. Platforma göre dosya uzantısı değişir: Linux .so, macOS .dylib, Windows .dll.
Sembol arama
Bir DynamicLibrary yüklendiğinde, içindeki fonksiyonlar lookupFunction ile aranır. Her fonksiyon bir sembol adıyla temsil edilir; örneğin add C tarafında int add(int, int) olabilir.
Sembol bulunamazsa ArgumentError fırlatılır. FFI, native ve Dart türleri arasında eşleme yapar: Int32 ↔ int, Double ↔ double, Pointer<Void> ↔ Pointer<NativeType>. Eşleme statik olarak bildirilir.
Uygulama LibraryLoader sınıfı
Bir LibraryLoader sınıfı tanımla: final String path; final String platform; LibraryLoader(this.path, this.platform); alan ve kurucu. String describe() => 'loading $path on $platform'; metodu. main içinde final l = LibraryLoader('libmylib.so', 'Linux'); yarat; print(l.describe()); ile yazdır.
Başlangıç kodu
void main() {
// LibraryLoader sınıfını tanımla (path, platform; describe)
// bir LibraryLoader yarat; describe() yazdır
}Örnek çözüm
class LibraryLoader {
final String path;
final String platform;
LibraryLoader(this.path, this.platform);
String describe() => 'loading $path on $platform';
}
void main() {
final l = LibraryLoader('libmylib.so', 'Linux');
print(l.describe());
}Beklenen çıktı
loading libmylib.so on Linux
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Library loading
final lib = DynamicLibrary.____('libmylib.so');
final lib = DynamicLibrary.open('libmylib.so');
Açıklama: DynamicLibrary.open dosyadan C kütüphanesi yükler.
2 Linux'ta C kütüphanesi dosya uzantısı nedir?
- .dll
- .dylib
- .so Doğru cevap
- .exe
Açıklama: Linux'ta C kütüphaneleri .so uzantılıdır.
3 DynamicLibrary metodlarını eşleştir
| Kavram | Anlamı |
|---|---|
DynamicLibrary.open |
Dosyadan yükle |
DynamicLibrary.process |
Süreçten yükle |
DynamicLibrary.executable |
Çalıştırılabilir dosyadan |
lookupFunction |
Sembol arama |