/ Usr / local / lib içindeki paylaşılan kütüphaneleri kullanın


58

Ben kaynaklardan bazı kütüphaneler inşa var ve sonra dosyaları make installiçindedir/usr/local/lib

Örneğin, benim durumumda libodb-2.2.sobu dizinde bulunan bir dosya var .

Ancak bağlantılı olan yürütülebilir dosyayı başlattığımda, libodbşu hatayı aldım: paylaşılan kitaplıkları yüklerken hata:libodb-2.2.so: cannont open shared object file: No such file or directory.

Çalıştırılabilir dosyamı doğru bir şekilde oluşturmadığım anlamına mı geliyor? ya da sistemde /usr/local/libayrıca klasörde bazı ilginç kütüphaneler olabileceğini belirtmeliyim ?

Ubuntu 12.04, Linux çekirdeği 3.2.0-38-jenerik kullanıyorum.



Size hata ayıklayıcınızla iyi bir arkadaşlık ilişkisi kurmanızı şiddetle tavsiye ediyorum
DDS

@DDS, biraz daha ayrıntılı çalışmanızı öneririm. Burada ortak bir site olduğunu biliyorsun. Lütfen, örneğin gdbbir linksorunla nasıl bir şekilde yardımcı olacağını belirtin . Gerçekten merak ediyorum. İlk başta, sözlerin bana problemle ilgisiz gözüküyor . Ama yanılıyor olabilirim. Gerçekten de yeterince bilmiyorum gdbve kütüphanelerin yüklenmesi.
Stephane Rolland

Üzgünüz ... bu yorum bir öğrencinin C programlama hakkındaki sorusu üzerine stackoverflow konmalıydı ... henüz görmedim U&L
DDS

@DDS C programlama öğrenmede mi yoksa Linux'ta bina öğrenmede mi? Lütfen daha kesin olun. Mesela ben Windows’tan geliyordum. Bu, C ++ bilmediğim anlamına gelmiyor ... yargılayıcı davranışınızın doğru olmadığını düşünmeye meyilliyim. SO'da olsaydı bile, davranışınız kısa bir süre moderatörlerin dikkatini çekecek. Bunun farkında ol. YARARLI bir sitedesin, faydalı bilgiyi paylaşan meraklı programcıların. Egoya hükmetmek için tasarlanan bir yer değil. (Endişelenmeyin, SO başlattığımda da hafifçe / makul bir şekilde bastırıldım ve bunun gerçekten iyi bir şey olduğunu düşünüyorum.
Stephane Rolland

Yanıtlar:


58

Geçerli oturum için yapabilecekleriniz

LD_LIBRARY_PATH = / lib: / usr / lib: / usr / yerel / lib ver

veya değişikliği kalıcı kılmak /usr/local/libiçin /etc/ld.so.conf(veya içerdiği bir şeye) ekleyebilir ve ldconfigroot olarak çalıştırabilirsiniz .

Hala sorun yaşıyorsanız, koşmak ldd [executable name]size bulmaya çalıştığı ve hangilerinin bulunamadığını gösterecektir.


3
Gönderen mansayfa ldd(1)"Olağan durumda, ldd standart dinamik bağlayıcı (bkz çağırır ld.so(8)birlikte) LD_TRACE_LOADED_OBJECTSolarak ayarlanmış ortam değişkeninin 1kütüphane bağımlılıklarını görüntülemek için linker neden olur. Unutmayın, ancak, bunun bazı durumlarda, bazı sürümleri lddmayıs . doğrudan Böylece, istihdam asla programı yürüterek bağımlılık bilgi almak için uğraşır ldd, bir de güvenilmeyen yürütülebilir . Bu keyfi kod çalıştırılmasına neden olabilir, çünkü daha güvenli bir alternatif uğraşırken güvenilmeyen yürütülebilir geçerli: ..."
SlySven

4
"... $ objdump -p /path/to/program | grep NEEDED"
SlySven

Güzel olan - daha önce hiç itirazda bulunmadım.
Flup

Gereğince bu maddeye Bu cevap canonically olan yanlış ve zararlı . Doğru bir yaklaşım için kullanılması -Lve -rpathkütüphaneler için bağlama arama yolu ve çalışma zamanı arama yolunu ayarlamak için derleme sırasında başına doğru bir yoldur bu soru-cevap.
Cliff Armstrong,

37

ldconfigKütüphaneyi oluşturduktan sonra zaten çalıştıysanız, okumaya devam edin. Değilse, önce ldconfig hakkında okuyun .

/usr/local/libldconfig'in kullandığı kütüphane yolunda olmayabilir. Bunu sadece yapabilirsiniz:

ldconfig /usr/local/lib

Ve şeyler bağlayıcı önbelleğine eklenmelidir, ancak yolu doğru şekilde eklemek muhtemelen daha iyidir. Bir /etc/ld.so.conf.drehberiniz olduğundan emin olun . Öyleyse bir dosya ekleyin ("usr-local.conf" veya her neyse) arayın ve içine bir satır koyun:

/usr/local/lib

Şimdi koş ldconfig. Ld.so.conf.d dizininiz yoksa, bir /etc/ld.so.conf dosyanız olmalıdır ve bu satırı sonuna ekleyebilirsiniz.


3
/etc/ld.so.conf.dCustom.conf dosyasını ekledim sonra sudoed ldconfig hesaba katmak için ve çalıştırılabilirim şimdi başlayabilir.
Stephane Rolland
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.