2013-01-06 9 views
5

başarıyla libawesomium-1.6.5.so karşı bağlayabilirsiniz: Paylaşılan Kitaplık karşı Bağlama özel LD_LIBRARY_PATH olmadan programını çağıran

-L-L. 
-L-lawesomium-1.6.5 
-L-ldl 

libawesomium-1.6.5.so

benim programı aramayı deneyin eğer şimdi (arayacağım, benim yürütülebilir aynı dizinde

./prog: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 

bu yüzden tekrar prog çalışan libawesomium-1.6.5.so.0libawesomium-1.6.5.so işaret eden bir sembolik, bana aynı hata veriyor yapmak özel bir 012 ile çağırarak,: ile şimdilik prog), onun varçalışır, ancak ben prog dağıtmak istiyorum ve ben kullanıcı dışarı kök hak ve LD_LIBRARY_PATH ayar gerek kalmadan (vb /usr/lib için awesomium yükleme) ile prog kullanmak isterler. Seçeneklerden biri LD_LIBRARY_PATH ayarlayan bir kabuk olurdu, ama ben (Ben de kötü bir fikir LD_LIBRARY_PATH edilir ayar heared) farklı bir yol tercih ediyorum. libawesomium-1.6.5.so.0 için sembolik yaratmaya gerek olmadığını

Ayrıca, çok iyi olurdu.

DÜZENLEME:

bağlayıcı çalışmalarına -rpath=. Geçme! Ama maalesef awesomium bununla başa çıkamaz:

/.../awesomium_test/AwesomiumProcess: error while loading shared libraries: libawesomium-1.6.5.so.0: cannot open shared object file: No such file or directory 

-rpath kullanma ve prog iç hata nedeni

cevap

6

gcc kullanıyorsanız, yürütülebilir dosyayı lib_directory dizinindeki kitaplıklarda arama yapmak için -Wl,-rpath=lib_directory geçirebilirsiniz.

Ayrıca, bu bağımsız değişken yürütülen programı içeren bir dizin temsil eden özel bir değer $ORIGIN kabul eder. Yani, -Wl,-rpath='$ORIGIN''u gcc'ye aktarırsanız, programdan aynı dizinde libawesomium-1.6.5.so'u saklayabilirsiniz.

+0

Wow, bu işe yarar, teşekkürler! Tamamen iyi değil, düzenlememi gör. – dav1d

+0

Bunu çözdüm! Programımda awesomium yüklemeden önce 'LD_LIBRARY_PATH' ayarlayabilirim. – dav1d

+0

Sen '$ ORIGIN'' yerine '-Wl, -rpath = geçmelidir' -Wl, -rpath = .' ve LI_LIBRARY_PATH yararsız olacaktır. – Julien

1

çalışır dan LD_LIBRARY_PATH ayarı. senin yolunda değil. Seçenekleriniz, ikili ile LD_LIBRARY_PATH setini çalıştıran bir bash betiğini dağıtmak ya da paylaşılan nesneyi/usr/lib veya/usr/local/lib dizinine veya o platformda uygun olan yere kopyalamaktır. Eğer statik olarak bağlamak istediğiniz sürece

, gerçekten kısa yolu yoktur.

+0

Evet, her iki yoldan da kaçınmak istedim. Başka bir yol olmadığını açıkladığınız için teşekkürler. Statik olarak bağlanma işe yaramaz, çünkü awesomium için statik lib (kapalı kaynak, sadece .so sağlanır) – dav1d