2011-01-03 17 views
19

Linux'ta bir C++ yürütülebilir yapıyorum. Bazı destek kitaplıklarına çalıştırılabilir bağlantılar.hatası: libboost_system.so.1.45.0: paylaşılan nesne dosyasını açamıyor: Böyle bir dosya veya dizin yok

[email protected]:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ./testfgci 
./testfgci: error while loading shared libraries: libboost_system.so.1.45.0: cannot open shared object file: No such file or directory 

Sonra bağımlılıkları kontrol etmek ikili üzerinde ldd çalıştırın::

[email protected]:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ldd testfgci 
    linux-gate.so.1 => (0x00380000) 
    libboost_system.so.1.45.0 => not found 
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00b50000) 
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x005f6000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0099a000) 
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x001b3000) 
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00110000) 
    /lib/ld-linux.so.2 (0x00ea2000) 

neden liboos_system.sl emin değilim ben ikili çalıştırmayı denediğinizde

Bu

çıkışı .45.0 SO bulunamadı. Bugün biraz daha erken inşa ettim. Birisi açıklayabilir mi?

+0

O oluştururken, ek bağlayıcı kütüphaneler için derleyici bayraklarını geçiyoruz mümkündür, ancak programı çalıştırmak istediğinizde, Boost kütüphaneleri don':

Bu benim için çalıştı ne linker yollarında var. [Kitaplıklarda sorunu birleştirmek] olası bir kopyası (http://stackoverflow.com/questions/4568187/linking-problem-in-libraries) – birryree

+1

Cevabı buldum. LD_LIBRARY_PATH yolumu eklemek ve daha sonra dışa aktarmak zorunda kaldım. İkili çalışır, ancak hataları bildirir (Hata sistemi: 9: Hatalı dosya tanıtıcısı).Bu soruyu yanıtlamak için ya da yeni bir soru sormam gerekecek – skyeagle

cevap

21

Kitaplık bulunamadı.

Kitaplıklar varsayılan olarak /lib, /usr/lib'da ve /etc/ld.so.conf tarafından belirtilen dizinlerde aranır.

Genellikle sistem kitaplıkları (paket yöneticiniz tarafından yüklendiyseniz, destek gibi) /usr/lib'da bulunur, ancak muhtemelen sizin durumunuz değildir.

Destek kitaplığınız sisteminizde nerede bulunur? Onları kendin mi derledin? Zaten

LD_LIBRARY_PATH="your/boost/directory" ./testfgci 

Ben senin paket yöneticisini kullanarak artırmak kütüphaneleri yüklemenizi öneririm: Bu durumda onlar LD_LIBRARY_PATH ortam değişkeni kullanarak bulunduğunuz dizindeki kütüphaneler aramaya dinamik bağlayıcı söylemelidir Bu hayatınızı çok daha kolaylaştıracaktır.

15

Bunun eski olduğunu biliyorum, ancak ld önbelleğini yeniden oluşturmak için ldconfig'u çalıştırabilirsiniz. Bu şekilde LD_LIBRARY_PATH'u güncellemenize gerek yoktur.

+1

Çok teşekkür ederim !!! – expert

3

Ubuntu kullanıcıları için bir not eklemek istedim (ve Debian, sanırım): Bu sistemler, LD_LIBRARY_PATH'u silen bir "güvenlik" özelliğine sahiptir. Bu ~/.bashrc için çalışacak

export LD_LIBRARY_PATH=/usr/local/boost_1_54_0/stage/lib:$LD_LIBRARY_PATH 

, fakat yolu bu özel interaktif kabuk için sadece ayarlanacak: /etc/environemnt veya ~/.profile veya ~/.bash_profile ikisinde de

: Bu işe yaramaz. Bu demektir ki, make'u örn. emacs veya eclipse, , başlatıcıdan değil, kabuktan emacs başlatmamışsanız işe yaramaz.

echo -e "\n/usr/local/boost_1_54_0/stage/lib" | sudo tee -a /etc/ld.so.conf 
sudo ldconfig 
İlgili konular