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
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. –
Şimdi biraz sakinleştim, "teşekkür ederim" eklemek istiyorum. –
Sorun yok; yardım etmekten memnunum. – bosmacs