'Ldd' tarafından “dinamik yürütülebilir değil” olarak bildirilen bir dosya diğer kütüphanelere bağlı mı?


9

Sadece bunu doğru yaptığımdan emin olmak için -

ldd /path/to/executable

ve "dinamik yürütülebilir değil" değerini döndürür. Bu, diğer kütüphanelere bağlı olmadığı anlamına gelir, değil mi? Öyleyse, bağımlılıklar konusunda endişelenmeden başka bir Ubuntu kutusuna aktarılabileceği anlamına mı geliyor?

Yanıtlar:


3

Doğru, ancak dikkate alınması gereken bir şey var.

Gönderen lddman:

ldd, a.out paylaşılan kitaplıklarında çalışmaz.

ldd, derleyici sürümlerine ldd desteği eklenmeden önce oluşturulan bazı son derece eski a.out programlarıyla çalışmaz. Bu programlardan birinde ldd kullanırsanız, program argc = 0 ile çalışmayı dener ve sonuçlar tahmin edilemez olur.


3
Başka bir neden, binary'nin 32 bit sistem için oluşturulmuş olması, ancak 64 bit sistemde kontrol etmeniz olabilir.
Ferdinand Prantl

@FerdinandPrantl 32 bit için oluşturulmuşsa, lddyine de 32 bit bağımlılıkları yazdırır.
Calmarius

@Calmarius, temel 32 bit libgcc1'e sahip olmadığınızda doğru değildir. Yeni bir Ubuntu Sunucusu kurulumunda doğrulandı: 32 bit ikili dosyalar için ldd'yi mutlu etmek için libgcc1: i386'yı yüklemeniz gerekiyor.
falstaff

1

@Calmarius doğrudur, 32 bitlik bir exe düşünürseniz, 32 bitlik temel kütüphaneler bile olmadan bu durum gerçekleşir.

Sistemimi yükseltmeye çalışıyorum (12.04'ten yeni bir Ubuntu 16.04 yüklemesi), eski bir propitiatory 32bit hizmeti yüklemem avservergerekiyor, bu gerekli ia32-libs(artık mevcut değil). Bu araçlar hem dpkgve apt-getmutsuz (ben ne yaparsam onu almamı isteyen apt-get -f installve bunu çalıştırırsanız, ben hizmet paketi kaldırmak ısrar) ve benim hizmet başlamaz.

Bunun 32bit kütüphanelerin eksik olduğunu kanıtlamak için, eski sistemimi (Ubuntu 12.04, ia32-libsve 32bit kütüphaneleri) taktım /sda2. Sağlanması /optmonte edilir (benim 32bit ikili içeren) /sda2/optOlabilirim chroot /sda2ve lddsonra amaçlandığı gibi çalışır.

Bunu düzeltmek için, tüm bağımlı kütüphane paketlerini elle kurmuş olabilirim: i386 (arch). Ancak bağımlılıklarımın ne olduğunu anlamaya çalışmak yerine, şarap yükledim (çoğunlukla 32bit'tir ve bu yüzden temel kütüphaneleri ve gerçekten ihtiyacım olmayan bir yükü daha yükler, ancak bununla tamamım).

Düzeltmek için dpkgve apt-getben düzenlenebilir, /var/lib/dpkg/statusbenim hizmet için paket bulma ve kaldırılan ia32-libs. Şimdi dpkgve apt-getmutlu

Yapılan, lddmutlulukla raporlar: - root@withnail:/opt/<service path># ldd avserver linux-gate.so.1 => (0xf77a6000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf778f000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7772000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf776b000) libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf7752000) libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xf7720000) libktssl.so.1.0.0 => /opt/<service path>/libktssl.so.1.0.0 (0xf76cb000) libktcrypto.so.1.0.0 => /opt/<service path>/libktcrypto.so.1.0.0 (0xf756b000) libktz.so.1 => /opt/<service path>/libktz.so.1 (0xf7558000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf754f000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf73d8000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7383000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7366000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf71af000) /lib/ld-linux.so.2 (0x565b1000)


Şarap yüklemek, ihtiyacınız olan tüm 32 bit kütüphaneleri almak için çok zekice bir numara!
psitae
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.