Belirli bir yürütülebilir dosya için bağlantılı kitaplığın değiştirilmesi (CentOs 6)


29

Buna bağlı bir çalıştırılabilir dosyam var:

  $ ldd a.out
        libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000)
        libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000)
        libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000)
.
.

Libcrypto ve libssl kütüphanelerinin olduğu yerde openssl 1.0.0-fips lib'leri. Bunun yerine 1.0.1 kitaplıklarıyla denemek istiyorum ve bu yüzden onları kendi dizinimde oluşturdum. Almanın bir yolu var mı a.outacı bir sürü olmadan benim yeni openssl kütüphanelere karşı yeniden bağlamak için? Kaçınmak istiyorum

  • Yeniden bağlantı a.outkurmak zorunda (yapı araçları büyük ölçüde karmaşık olduğu için)
  • Herhangi bir global ayarın değiştirilmesi (çünkü diğer aygıtlar bu makinede çalışıyor)

Burada umduğum şeyi yapmak mümkün mü?

Yanıtlar:


22

Bu özel yürütme için geçici olarak farklı bir kütüphane değiştirebilirsiniz. Linux'ta, LD_LIBRARY_PATH ortam değişkeni, standart dizin kümelerinden önce kütüphanelerin ilk önce aranması gereken iki nokta üst üste bir dizin dizinidir; bu, yeni bir kütüphanede hata ayıklama veya standart dışı bir kütüphaneyi özel amaçlar için kullanırken yararlıdır. LD_PRELOAD ortam değişkeni, /etc/ld.so.preload'da olduğu gibi standart seti geçersiz kılan işlevlere sahip paylaşılan kütüphaneleri listeler. - Paylaşılan Kütüphaneler

Yükleyiciyi doğrudan da çağırabilirsiniz:

/lib/ld-linux.so.2 - kütüphane-yolu path executable


1
LD_LIBRARY_PATH, varsayılan arama yolunu geçersiz kılmaz. Ayarladım ama ldd hala geçersiz kılınan yolu değil, sistem varsayılan yolunu gösteriyor. Yine de LD_PRELOAD ayarını yaparak kendi kütüphanemin yüklenmesini zorlayabilirim.
Calmarius

18

LD_LIBRARY_PATHOrtam değişkenini ayarlayan bir sarmalayıcı komut dosyası yazın . Bu PATHpaylaşılan kütüphaneler için kolye . Sistem arama yolu her zaman içinde listelenen dizinlerden sonra aranır $LD_LIBRARY_PATH. Referans için dinamik linker kılavuzuna bakın .

#!/bin/sh
export LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib
exec /path/to/a.out "$@"

Veya bir kereye mahsus olmak üzere doğrudan komut satırında:

LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib ./a.out

Alternatif olarak, ikili dosyayı değiştirmek istiyorsanız, çalıştırılabilir dosyada bulunan kütüphane arama yolunu düzenlemenizi sağlayan chrpath'ı deneyin .


2
İçin +1 chrpath. Tam olarak ihtiyacım olan şeydi.
Raghav RV

Sevimli bir hikaye, Microsoft, Google'a 2 dakika harcamak için çok aptalca davranıyor ve herkese SQL Server'ı opens-1.0.0 ile açıkça ilişkilendirmek veya openssl.so blogs.msdn.microsoft.com/sql_server_team
Evan Carroll
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.