2012-08-27 10 views
5

Aynı lib/file üzerinde aynı uygulamada iki kez dlopen kullanırsam, her iki durumda da aynı tanıtımı verir mi? Bunun için herhangi bir garanti var mı (kısa bir deney, en azından benim kutumda olduğunu gösterdi)?dlopen aynı dosyaya sahip iki çağrı için aynı tanıtımı verir mi?

Şu an küçük bir eklenti sistemi (meraktan dolayı) ile uğraşıyorum ve bu gözlemlenen davranış için bir çeşit garanti varsa, bu adresi çoğaltılmış yükleri önlemek için bir eklenti için anahtar olarak kullanabilirim.

cevap

8

Evet. dlopen(3) linux adam sayfanın mesajı:

If the same library is loaded again with dlopen(), the same file 
    handle is returned. The dl library maintains reference counts for 
    library handles, so a dynamic library is not deallocated until 
    dlclose() has been called on it as many times as dlopen() 
    has succeeded on it. 

BTW, Linux sistemlerinde, sen manydl.c gösteriyor benim örnek olarak, paylaşılan kütüphanelerin bir sürü (binlerce birçok onlarca) dlopen olabilir

. Ana sınırlama adres alanıdır. Yani, pratikte, dlclose hakkında rahatsızlık duymuyorum. Aralık 2017 yılında

Eklendi (sizin Dlopen-ed paylaşılan kütüphaneler garip veya kaynak tüketen yapıcı veya yıkıcı işlevlere sahip olmadıkça)

:

kesin yolu dize geçirilen neyi ilgili olduğu Bildirimi olduğunu dlopen. Bu nedenle, "./foo.so" ve "././foo.so" (veya "../foosymlink.so", foo.so öğesinin bir bağlantı noktasıdır) kullanırsanız, dlopen-ed tanıtıcıları farklıdır ve bazı durumlarda bu paylaşılan kitaplığın iki örneğinin tuhaf davranışı gerçekleşebilir.

+1

.. ve bu sayfayı okudum, neden bu paragrafı okumadım? Hmpf .. peki, teşekkür ederim benim aptal soruyu cevaplamak için daha az hayır :) – mageta

İlgili konular