64bit linuxta 32bit kod derleme

Bu tarzda ilk blog girdim. Burayı ziyaret edecek herkesi ilgilendirir mi bilemiyorum (ziyaret eden var mı onu da bilemiyorum). Ama birilerinin işine yarayabilir umuduyla yazıyorum. Teknik konuları da yazılar yazmayı düşünüyorum.

Okuldaki bir ödev için C ve Assembly kullanarak bir proje geliştirmem gerekiyordu. Derleyici olarak nasm ve gcc kullanılacaktı. Fakat bir sorun vardı ödevin 32 bitlik bir bilgisayarda geliştirilmesi öngörülüyordu ve benim kullandığım bilgisayarda 64 bit bir kubuntu sürümü vardı(8.04 Hardy). Teorik olarak 32 bit makinede çalışacak olan bir kod 64 bitlik derleyicide derlenebiliyordu ama işler teorikte olduğu kadar kolay yürümedi.

Bir assembly yordamının C kodu içerisinden çaırılması gerkiyordu.

Nasm ile assembly kodunu derlerken “nasm elf” seçeneğini kullandım. Zaten elf seçeneği elf32parametresiyle aynı anlama geliyordu. (64 bitlik bir derleme için elf64 kullanılacağını da belirteyim.) Assembly kodunun derlendiği kısımda pek bir zorlukla karşılaşmamıştım.

C kodunu doğrudan c ile derledikten sonra nasm’ın oluşturduğu ikili kod dosyasıyla bağlamak mümkün değildi. C kodunun da 32 bite göre derlenmesi gerekiyordu. bunun için gcc’nin -m32 parametresini kullanmak gerekti. Fakat stdio kütüphanesinin 32 bit için olan bir sürümü bulunamadığı için hata alıyordum.

error: gnu/stubs-32.h: No such file or directory

kubuntu için libc6-dev-i386 paketini yüklemek sorunu halletmişti

sudo apt-get install libc6-dev-i386

bu kez gcc ile dosyaları birbirine bağlamaya çalıştığımda şuna benzer bir hata alıyordum:

/usr/bin/ld: cannot find -lgcc…

Biraz araştırdıktan sonra gccnin bendeki 4.2.4 nolu sürümüyle ilgili bir sorun olduğunu öğrendim. Gccnin daha eski bir sürümünü yüklemek gerekecekti. gcc-3.4 benim işimi gördü:

sudo apt-get install gcc-3.4

daha sonra derleme işlemlerini bu gcc sürümüyle yapmak gerekiyordu. hala gcc komutu sistemde gccnin en son sürümüne karşılık geldiğinden derlemeyi

gcc-3.4 -m32 ….

şeklinde gerçekleştirdim ve elimde çalışan bir dosya oldu. 32 bitlik bir makinada denediğimde de programın sorunsuz çalıştığını gördüm.

Derleme işlemini gerçekleştirmek için makefile kullanmanız ve makefileda derlemeyi şöyle gerçekleştirmeniz işinizi kolaylaştırabilir

compiler=gcc-3.4 -m32

$(compiler) input…..

Bu tarz blog girdileri yazmak konusunda pek deneyimli sayılmam ama dilerim birilerinin işine yarar.

Facebook Yorum

Bir Cevap Yazın