Linkerler Hakkında
-
Şimdi benim merak ettiğim konu şu biz programı yazdık diyelim obje oluştü (linux için .o windows için .obj) peki link leme işleminde dışarıdaki belli şeylere bağlama yapılıyor merak ediyorum lib dosyalarında .a yada.lib yada bir diğer obje ile linkleme yapılırken sadece gerekli fonksiyonlar mı alınıyor yoksa durum daha mı farklı
Teşekkür ederim
-
Linker ayarlarına bağlı. Harici bağlamada default olarak kullanılmayan fonksiyonlar çıkarılır. Fakat misal VS'da debug mode'da ise linker optimizasyonu default olarak kapalı olduğundan tutar. Release mode'da ise linker optimizasyonu default olarak açıktır, tutmaz. Bu sebeple linker ayarlarından optimizasyon için gerekli parametreleri eklemen gerekebilir. Hangi linker'ı kullanıyorsan dokümantasyonundan optimizasyon için gereken parametreleri öğrenebilirsin.
-
Hocam gerekli gereksiz herşeyiyle gelir. statik çağrılanlar ok ama dinamik olarak neye ihtiyaç duyulacağını tam bilemez compiler. onun için heryşeyiyle gömer.
HolyOne tarafından 25/Ağu/12 11:52 tarihinde düzenlenmiştir -
Evet. Daha detaylı açıklamak gerekirse static linking'de herhangi bir optimizasyon yapılmamış ise kütüphanedeki fonksiyon/datalar doğrudan alınır. Bu da farklı ortamlarda çalışacağından emin olmanı sağlar. Aynı zamanda static linking'te kod senin yazılımına dahil olduğundan daha performanslı çalışır. Fakat dosyanı fazlasıyla şişirir. Bundan kurtulmak ise linker'ın yeteneklerine ve kütüphanenin durumuna bağlıdır.
Zira kullanılan kütüphane fonksiyonları kütüphane içerisinde farklı fonksiyonlara, dataya ihtiyaç duyuyorsa onların da dahil edilmesi gerekir ki, eğer onlar da statik olmayan ve bununla beraber iyi yazılmamış fonksiyonlar ise ve kütüphane fonksiyonları arasındaki bağımlılık varsa o zaman optimize etmeye kalksan da pek değişen bir şey olmayacağı gibi linker'ın yeteneklerine göre bu konuda ciddi sorunlar yaşayabilirsin.
Compiler kod bünyesindeki kullanılmayan static fonksiyonları çıkarabilir. Fakat harici bağlama optimizasyonu ancak linker tarafından yapılabilir. Kullanılmayan fonksiyonlar çıkarılacak ise dediğim üzere kütüphanenin durumunu ve linker'ın yeteneklerini göz önüne alman lazım. Görece bir durum. Fakat günümüzde bu konuda standart kütüphaneler ve linkerlar konusunda pek sıkıntı yaşayacağını sanmıyorum. Optimizasyona gidebilirsin. Fakat yaptığın işin de bilincinde olursan ayakların yere sağlam basar.
Dynamic linking'te ise dll kullanmak yazılımının boyutunu önemsiz miktarda etkiler ama dll'in load edilmesi ve zıplama aşamaları vs. performansı düşürür. Ayrıca standart durumda kalmayan, değişmesi muhtemel herhangi bir bir dll dosyasına bağımlı kalırsan static linking'teki gibi kodunun çalışacağından emin olamazsın.
Bu sebeple şartları iyi değerlendirmen lazım.
-
Hm teşekkür ederim bunu hep merak ediyordum ancak şöyle bir bakım dedim kimse bahsetmemiş