Paylaşılan bir kitaplık (paylaşılan nesne) oluşturursam bunu aşağıdaki iki yolla kullanabilirim:
İlk olarak bir statik kitaplık kullanacağım gibi paylaşılan bir kitaplık kullanıyorum.Unix'te paylaşılan kütüphaneler hakkında ikilem Dilim hakkında
#include "myLib.h"
//...
//afterwards I can use functions defined in mylib.h
myFunction();
paylaşılan kütüphaneyi kullanan ikinci yolu dinamik yükleyici API fonksiyonlarını çağırarak geçerli: dlopen
, dlsym
ve dlfcn.h
den dlclose
. Örneğin, bir eklenti deseni uygulamak istediğimde bu şekilde paylaşılan kütüphaneyi kullanırdım. şu şekilde görünecektir Listeleme:
#include <dlfcn.h>
void *myLib; /* Handle to shared lib file */
void (*myFunction)(); /* Pointer to loaded function */
//...
//load shared object
myLib = dlopen("/home/dlTest/myLib.so",RTLD_LAZY);
dlerror();
//get handle to function
myFunction = dlsym(myLib, "myFunction");
dlerror();
//execute function
(*myFunction)();
//close lib
dlclose(myLib);
dlerror();
Şimdi benim ilk soru geçerli: yükleme süresi açısından paylaşılan nesnenin bu iki kullanımlar arasındaki fark nedir? Paylaşılan kitaplığı ilk olarak kullanarak, yüklenen zamanda ana uygulamaya paylaşımlı kütüphaneyi bağlar/yüklüyoruz ve ikincisi çalışma zamanında aynı şeyi yapıyoruz.
İkinci soru. Bu iki kullanımın adı nedir? Birincisi, statik olarak bağlantılı paylaşımlı kütüphane, diğeri ise dinamik olarak bağlantılı/yüklü paylaşımlı kütüphane olarak adlandırılıyor?
Üçüncü soru-fPIC
bayrağı olmadan bağımsız bir kütüphane kurduysam (sürümden bağımsız kod), ikinci bir şekilde kullanabilir miyim?
Alkış
Paylaşılan bir kitaplığı değiştirip yeniden derlerse, örtülü bağlantı oluşturuyorsam veya bu uygulamalar yüklendiğinde otomatik olarak yapılırsa, paylaşılan lib'i kullanan tüm ana uygulamaları yeniden bağlamalı mıyım? –