64 bit VM'de 32 bit program çalıştırılamıyor


12

Ubuntu 10.04 32 bit makinede küçük bir "merhaba dünya" C programı derledim. Sonra çalıştırılabilir (a.out) Ubuntu 12.10 (64 bit) VMWare sanal makineye koyup çalıştırmayı denedim (./ a.out). İşletim sistemi dosyayı tanımlamaz ve 'Böyle bir dosya veya dizin yok' der. Ama aynı yürütülebilir dosyayı bir 64 bit dizüstü bilgisayarda çalışan bir Ubuntu 12.10 (64 bit) üzerine koyduğumda, iyi çalışıyor ve istenen çıktıyı elde ediyorum. VM, IBM Blade Sunucuları üzerinde çalışıyor. Bir VM için neden sonuçları bilmek istedim?

Yanıtlar:


20

Mesajı No such file or directorysizin yürütülebilir dosya ifade etmez: a.out. Bunun yerine , 32 bit dinamik olarak bağlı yürütülebilir dosyayı çalıştırmak için gereken bir yardımcı program anlamına gelir .a.out

Şimdi, tüm bu güzel makalede çok iyi açıklanmış buldum:

Statik ve dinamik bağlantı

İki tür ikili yürütülebilir dosya vardır: statik olarak bağlı ve dinamik olarak bağlı olanlar. Statik olarak bağlı olanlar hakkında ilk olarak : Bir program bir kütüphane fonksiyonunu çağırmak istediğinde, isme göre bunu ifade eder. Programı kaynaktan oluştururken, programda kullanılan tüm kütüphane işlevleri kütüphaneden programa kopyalanır. Program daha sonra kendi kodunu ve kullandığı kütüphane fonksiyonlarının kodunu içerir. Daha sonra çağrı yapılan yerlerde ad, programdaki ilgili işlevin adresiyle değiştirilir. Bu işleme bağlantı adı verilir çünkü bir işlevin adını işlevin kendisi ve uygulamasıyla ilişkilendirir. Statik olarak adlandırılır , çünkü program oluşturulduktan sonra bağlantı değiştirilemez.

Dinamik olarak bağlı programlar farklı çalışır: Program aynı zamanda ada göre kütüphane işlevlerine başvurur. Programı oluştururken, programla birlikte iki liste birleştirilir ve saklanır: hangi kütüphane işlevlerinin hangi yerlerde kullanıldığı ve program tarafından kullanılan işlevleri içeren kütüphanelerin listesi. Programı oluşturmak için hepsi bu.

Daha sonra, yürütme sırasında , dinamik bağlayıcı olarak adlandırılan özel bir yardımcı program, kütüphane listesindeki her kitaplık için dosya sistemindeki belirli yerlere bakar ve belleğe yükler. Artık dinamik bağlayıcı, kütüphane fonksiyonlarının hangi bellek adreslerinde bulunduğunu bilir. Kitaplık işlevlerini çağıran tüm yerlere doğru adresi yazmak için ilk listeyi kullanır. Ardından dinamik olarak bağlı program çalıştırılabilir.


3
Bu "Dosya bulunamadı" hata mesajı ilk kez ° ͜ ° beni karıştırdı, o zaman uygulama tarafından gerekli bazı dosya eksik olduğunu anladım.
Ramchandra Apte

@Radu Rădeanu, yardımcı programa ne dersiniz ? Dinamik olarak bağlı bir kütüphane sanırım. Eğer öyleyse, yardımcı program olarak adlandırmak açıklamayı karıştırır.
golem

İşte bu sorunu anlamak için yararlı bulduğum bir bağlantı - 64 bit sistemde 32 bit ikili çalıştırırken “Bulunamadı” mesajı
golem
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.