2010-11-19 10 views
4

Köküm olmayan bir Solaris sunucusunda samtools derlemeye çalışıyorum. Samtools zlib'e bağlıdır. Bu makinedeki sistem zlib büyük dosya desteği ile derlenmemiştir, bu nedenle bu sürüme göre samtools derlenmesi beklenen bir etkiye sahiptir: samtools sadece küçük dosyaları ele alır. Büyük dosyaları ele alabilmek için ihtiyacım var. Neyse ki, büyük dosya desteği ile /usr/local/apps/zlib-1.2.5/ adresinde yönetici tarafından derlenen bir zlib sürümü vardır. CFLAGS'a -R /usr/local/apps/zlib-1.2.5/lib ekleyerek buna derleme yapabilirim, fakat bu işe yaramaz gibi görünüyor.Çalışma zamanı linker, solaris üzerinde çalıştırılabilir RPATH öğelerini yoksayar

Ben samtools çalıştırmayı denediğinizde bu hata ile çöküyor, aşağıdaki gibidir: belirtileridir

ld.so.1: samtools: fatal: relocation error: file samtools: symbol gzopen64: referenced symbol not found 

Ben LD_LIBRARY_PATH için /usr/local/apps/zlib-1.2.5/ ulaşırsa samtools çalışıyor.

analiz ldd samtools ve readelf şu sonuçları verir:

$ ldd -r samtools 
     libnsl.so.1 => /usr/lib/libnsl.so.1 
     libsocket.so.1 =>  /usr/lib/libsocket.so.1 
     libresolv.so.2 =>  /usr/lib/libresolv.so.2 
     libm.so.2 =>  /usr/lib/libm.so.2 
     libcurses.so.1 =>  /usr/lib/libcurses.so.1 
     libz.so =>  /usr/lib/libz.so 
     libc.so.1 =>  /usr/lib/libc.so.1 
     libmp.so.2 => /usr/lib/libmp.so.2 
     libmd.so.1 => /usr/lib/libmd.so.1 
     libscf.so.1 => /usr/lib/libscf.so.1 
     libdoor.so.1 => /usr/lib/libdoor.so.1 
     libuutil.so.1 =>   /usr/lib/libuutil.so.1 
     libgen.so.1 => /usr/lib/libgen.so.1 
     symbol not found: gzopen64    (samtools) 

$ ldd -s samtools 

    ...(snip)... 

    find object=libz.so; required by samtools 
    search path=/usr/lib:/usr/openwin/lib:/usr/dt/lib:/usr/local/lib (LD_LIBRARY_PATH) 
    trying path=/usr/lib/libz.so 
     libz.so =>  /usr/lib/libz.so 

    ...(snip)... 

$ readelf -d samtools | grep RPATH 
0x0000000f (RPATH)      Library rpath: [/usr/local/apps/zlib-1.2.5/lib:/usr/local/apps/gcc-4.5.1/lib] 

Yani /usr/local/apps/zlib-1.2.5/lib anlıyorum ikili programların rpath, içinde açıkça paylaşılan kütüphaneler için çalışma zamanında aranacak gerekiyordu. Ancak, ldd -s bu dizinin hiçbir zaman arama yapılmadığını gösterir. Bu yolu LD_LIBRARY_PATH dosyasına eklemek ve ldd komutlarını yeniden çalıştırmak beklenen etkiye sahiptir: dizin aranır ve libz dosyasının doğru sürümü bulunur.

Peki samtools'u, LD_LIBRARY_PATH kullanmadan çalışma zamanında /usr/local/apps/zlib-1.2.5/lib içinde arama yapmak için nasıl zorlayabilirim?


Düzenleme: dokümantasyon here-R seçenek yapılacak doğru şey olduğunu belirtmek için görünüyor. Ama işe yaramıyor. Ben hiçbir şekilde kulüpler

cevap

3

bir Solaris uzman anlamına gelir, ancak bu satırı:

find object=libz.so; required by samtools 
search path=/usr/lib:/usr/openwin/lib:/usr/dt/lib:/usr/local/lib (LD_LIBRARY_PATH) 

LD_LIBRARY_PATH zaten ayarlanmış olduğunu bana göstermek gibi görünüyor ve içinde /usr/lib yolu herhangi bir çalışma zamanı bağlayıcı yolları geçersiz kılan . Eğer gerçekten mevcutsa LD_LIBRARY_PATH unsetini kaldırabilir ve bunun çözülüp çözülmediğine bakar mısınız?

+0

Gah! Haklısın! Ama init dosyalarının hiçbiri onu ayarlamıyor, bu yüzden nasıl ayarlandığını bilmiyorum. Yine de, bir şeylerin işleyişini bozması. Yanlış yapılandırılmış bir sunucu gibi görünüyor. Kabuk init dosyalarında unset ve sysadmin e-postalarım. –

+0

Şimdi biraz sakinleştim, "teşekkür ederim" eklemek istiyorum. –

+0

Sorun yok; yardım etmekten memnunum. – bosmacs