Dinamik library program bağlantısı?

Başlatan mir_as82, 26 Mayıs 2016, 17:39:08

mir_as82

Dinamik librarylerin bizim çalıştırdığımız program ile ilişkisini baştan sona anlatabilecek bir arkadaş var mı acaba? Biz bir fonksiyon çağırınca ilgili dinamik libraryden nasıl oluyor?
Yani dinamik library ye onu çağıran programların erişimi nasıl olur?
Örneğin ben gittim disk birleştirdim, daha sonra dinamik library nin fonksiyonlarına nasıl ulaşıyorum?
Hep fiziksel sabit bir RAM alanında mı olur dinamik kütüphane fonksiyonları?
Örneğin bir libmiras.so kütüphanesi olsun içinde de func isimli bir fonksiyon olsun.
libmiras.so yu hem programA hemde program B kullanıyor olsun ve derlenirken ona göre derlenmiş olsunlar. programA ve programB derlenirken çağıracakları func isimli fonksiyonu adresini alıp executable dosyaları içine yazarlar?Bu durumda programA ve programB hangi adresi yazar?
Aslında daha uzar sorular.
Kısaca dinamik (.so) kütüphanelerin programımız ile ve hafıza(RAM, harddisk) ile olan ilişkisini öğrenmek istiyorum.

Tagli

#1
Olaya pek hakim değilim, bildiğim kadarıyla anlatacağım. Yanlışım varsa bir bilen düzeltsin.

Dinamik olarak linklenmiş bir programı çalıştırdığında önce linker çalışır. Linker, .so dosyalarını sistemde nerede bulacağını bilir. Bunu zaten programı derlerken sen söylüyorsun. Dosyanın hard disk üzerindeki fiziksel konumunun değişmesi bir sorun değil, linker baktığı adreste (örneğin /usr/local/lib/) dosyayı bulduğu sürece sorun olmaz. .so dosyasındaki çalıştırılabilir kodlar, program başladığı sırada RAM'e kopyalanır. Tahminimce bu kopyalama işlemi sırasında RAM adreslerine göre bir ayarlama yapılıyor, zaten link işlemi dedikleri bu sanırım. Anladığım kadarıyla bir kütüphaneyi kullanan her programın kendi RAM bölgesinde, çalışma sırasında o kütüphanenin bir kopyası oluşmuş oluyor, ama bu kısımdan da çok emin değilim.

Bazı durumlarda .so dosyaları programın başlaması sırasında değil, program tarafından linker elle çağrılarak da bağlanabilir. Ben hiç bu şekilde kullanmadım, ihtiyacım olmadı.
Gökçe Tağlıoğlu

mir_as82

Hocam linker program derlenirken çalışmaz mı? Program çalışırken çalıyor mu linker?
Bulunduğu directory de de sorun yok. Bu directory içindeki fonksiyonun yerini program derlenirken ve linklenirken execuatable dosyada bir yere referans ekliyor. O zaman linker .so dosyasının içini okuyor ve kullanılan fonksiyonun hangi adreste olduğunu gidip bizim programa yazıyor. Bizim programda çalışma esnasında gidip o lokasyona atlıyor ve .so içinde olan fonksiyonumuzu işletiyor??