2013-02-22 11 views
7

Bir üçüncü taraf kitaplığı (örneğin, TP.so), (GenericV2.so) olduğu varsayılan dosya yerine yanlış bir kitaplık sürümü (sözgelimi, GenericV1.so) kullanarak sorun yaşıyorum. Ek kütüphane programımda kullanılmak üzere eklenmiştir.RTLD_DEEPBIND desteklemeyen platformlar için dlopen() işlevinde RTLD_DEEPBIND bayrağı için bir alternatif var mı?

Bunun için doğru çözüm (SO üzerinde iyi belgelendirilmiş), RTLD_DEEPBIND bayrağıyla dlopen() kullanmaktır. Ama bayrak sadece Linux üzerinde değil, vs.

HP-UX, Solaris, AIX gibi diğer platformlar olmayan bu Linux platformlarında kullanılmak üzere RTLD_DEEPBIND için bir alternatif var mı geçerli? Yanıtlarınız için

Teşekkür

+3

Sorunun "RTLD_DEEPBIND yerine POSIX uyumlu bir şekilde nasıl değiştirilir?" Bu, sorunlarınızın platform bağımsız bir şekilde uygulanmasıyla sonuçlanacaktır. –

cevap

0

gerçekten hiç RTLD_DEEPBIND gerekmez geliyor bana. Yalnızca, rakip sembollere sahip kütüphanelerin doğru sırada yüklendiğinden emin olmanız gerekir.

Bazı fikirler: Emin sağ kütüphane yapmak için LD_PRELOAD kullanabilirsiniz

  1. (GenericV2.so) başka kütüphanelere önce yüklenir.

  2. Kitaplıkları doğru sıraya bölen bir işlev oluşturabilirsiniz: GenericV2.so ve sonra TP.so.

  3. GenericV1.so'nun hiç yüklenmediğinden emin olmak mümkün mü? Bu kütüphaneden bir şeye ihtiyacın var mı?

İlgili konular