SORU
11 Mayıs 2009, PAZARTESİ


Birden fazla tek bir ana bilgisayarda kütüphaneler abone olarak giriş:

Tek bir ana bilgisayarda birden çok abone olarak giriş kütüphaneler

Benim linux (SUSE ® Linux Enterprise Server-8) sunucu şu anda ama bu sürüm işe yaramaz bir program var ve glibc-2.3.3 gerektirir 2.2.5-235 abone olarak giriş vardır.

Birden fazla glibcs aynı ana bilgisayarda yüklü olması mümkün mü?

Bu eski abone olarak giriş üzerinde programımı çalıştırdığımda aldığım hata:

./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./myapp)
./myapp: /lib/i686/libpthread.so.0: version `GLIBC_2.3.2' not found (required by ./myapp)
./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libxerces-c.so.27)
./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by ./libstdc  .so.6)
./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libstdc  .so.6)

Yeni bir dizin newglibc adlı oluşturdum ve aşağıdaki dosyaları kopyalar yani:

libpthread.so.0
libm.so.6
libc.so.6
ld-2.3.3.so
ld-linux.so.2 -> ld-2.3.3.so

ve

export LD_LIBRARY_PATH=newglibc:$LD_LIBRARY_PATH

Ama bir hata alıyorum:

./myapp: /lib/ld-linux.so.2: version `GLIBC_PRIVATE' not found (required by ./newglibc/libpthread.so.0)
./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by libstdc  .so.6)
./myapp: /lib/ld-linux.so.2: version `GLIBC_PRIVATE' not found (required by ./newglibc/libm.so.6)
./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by ./newglibc/libc.so.6)
./myapp: /lib/ld-linux.so.2: version `GLIBC_PRIVATE' not found (required by ./newglibc/libc.so.6)

Hala /lib bağlama ve koydum nereden aldığın değil gibi görünüyor?

Teşekkürler

CEVAP
12 Mayıs 2009, Salı


Çok mümkün, aynı sistemde abone olarak giriş birden çok sürümü (biz bunu hergün yapıyoruz).

Ancak, abone olarak giriş tüm maç gereken birçok parça (200 paylaşılan kitaplıkları) oluştuğunu bilmemiz gerekir. Parçalardan biri ld-linux.bu yüzden.2, vegerekirkütüphanenin maç.bu yüzden.6 veya gördüğünüz hataları görürsünüz.

Ld-linux için tam yolu.bu yüzden.2 bağlantı zaman yürütülebilir içine kodlanmış ve Bağlantı yapıldıktan sonra kolayca değiştirilebilir.

Yeni abone olarak giriş ile birlikte çalıştırılabilir bir dosya oluşturmak için şunu yapın:

g   main.o -o myapp ... \
   -Wl,--rpath=/path/to/newglibc \
   -Wl,--dynamic-linker=/path/to/newglibc/ld-linux.so.2

-rpath linker seçeneği yapacağınız çalışma zamanı yükleyici arama için kütüphaneler /path/to/newglibc (sen yapmayasın ayarlayın LD_LIBRARY_PATH daha önce çalışan) ve -dynamic-linker seçenek olacak "bake" yoluna doğru ld-linux.so.2 içine uygulama.

Eğer myapp uygulama (üçüncü parti bir ikili çünkü örneğin) yeniden yapabilirsen, tüm kayıp değil, ama yanıltıcıdır alır. Bir çözüm için chroot uygun bir ortam oluşturmaktır. Başka bir olasılık rtldi binary editor kullanmaktır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 2ndfloor91

    2ndfloor91

    17 Kasım 2007
  • Major FX

    Major FX

    6 HAZİRAN 2012
  • MrChiCity3

    MrChiCity3

    14 NİSAN 2008