Bir "yükleyiciye" bağlı bir dosyayı yürütemediğinizde, aldığınız hata, yürütmekte olduğunuz dosya yerine yükleyiciye başvurabilir.
- Dinamik olarak bağlanmış bir yerel çalıştırılabilir dosyasının yükleyicisi, dinamik kitaplıkların yüklenmesinden sorumlu olan sistemin bir parçasıdır. Bu
/lib/ld.soveya benzeri bir şey /lib/ld-linux.so.2ve yürütülebilir bir dosya olmalıdır.
- Bir betiğin yükleyicisi, shebang satırında belirtilen programdır, örneğin
/bin/sh, başlangıçtaki bir komut dosyası için #!/bin/sh. (Bash ve zsh, bu durumda “komut bulunamadı” yerine “hatalı tercüman” mesajı verir.)
Hata mesajı, yükleyicinin sorun olduğunu göstermemekte yanıltıcıdır. Ne yazık ki, bunu düzeltmek zor olacaktır, çünkü çekirdek arayüzü yalnızca sayısal bir hata kodu rapor etmek için yeterli alana sahiptir, aynı zamanda hatanın aslında farklı bir dosyayla ilgili olduğunu göstermez. Bazı mermiler, kendileri komut dosyaları için çalışırlar ( #!komut dosyasındaki satırı okumak ve hata koşulu yeniden çalışmak), ancak hiçbiri yerel ikili dosyalar için aynı şeyi yapma girişimi görmedim.
lddİkili dosyalar üzerinde çalışmayacaktır çünkü bazı özel ortam değişkenlerini ayarlayarak ve daha sonra programı çalıştırarak yükleyicinin çalışmasını sağlayarak çalışır. straceÇekirdeğin rapor ettiği şeyden daha fazlasını rapor etmeyeceği için anlamlı bir bilgi vermeyecektir. Görüldüğü gibi çekirdeğin bildiği her şeyi rapor edememesidir.
Bu durum genellikle doğru sistem (veya sistem ailesi) ve üst mimarlık için yanlış bir alt mimarlık için bir ikili çalıştırmaya çalıştığınızda ortaya çıkar. Burada ELF ikili dosyalarını bekleyen bir sistemde ELF ikili dosyaları var, bu yüzden çekirdek onları iyi yüklüyor. Bunlar bir x86_64 işlemci üzerinde çalışan i386 binary'leridir, bu nedenle talimatlar mantıklıdır ve programı yükleyicisini arayabileceği noktaya getirir. Ancak program 32 bitlik bir programdır ( fileçıktının belirttiği gibi), 32 bitlik yükleyiciyi arar /lib/ld-linux.so.2ve muhtemelen yalnızca 64 bitlik yükleyiciyi /lib64/ld-linux-x86-64.so.2chroot'a yüklediniz .
32 bit çalışma zamanı sistemini chroot: loader ve programların ihtiyaç duyduğu tüm kütüphaneleri kurmanız gerekir. Debian wheezy'den itibaren, hem i386 hem de x86_64 desteğini istiyorsanız, bir amd64 yüklemesiyle başlayın ve çoklu erişim desteğini etkinleştirin : dpkg --add-architecture i386sonra çalıştırın apt-get updateve apt-get install libc6:i386 zlib1g:i386 …(hangi kitaplıkların muhtemel olduğunu görmek için Debian'ın perl paketinin bağımlılıklarının bir listesini oluşturmak istiyorsanız) çalıştırın . ihtiyaç duyulabilir, kullanabilirsiniz aptitude search -F %p '~Rdepends:^perl$ ~ri386'). ia32-libsPaketi yükleyerek ortak kütüphaneler koleksiyonundan yararlanabilirsiniz ( önce multiarch desteğini etkinleştirmeniz gerekir). Debian amd64’te wheezy’de, 32-bit yükleyici libc6-i386paketin içinde. Yükleyerek daha büyük bir 32-bit kitaplık grubunu yükleyebilirsiniz ia32-libs.
libc6-i386paket veyaia32-libsçok fazla kitaplık istiyorsanız).