Bir Fincan Kahve Ve Programlama-2

Bir C/C++ programının derlenme aşamalarından geçen yazımda bahsetmiştim. Bu yazımda bir C/C++ programının farklı cihazlar için derlenmesinden bahsedeceğim. Bu işleme genel olarak “Cross Compile” deniyor. Şimdi biraz bu olay hakkında konuşalım.

Şimdi geçen yazımda aslında yazılımın tamamen donanıma bağlı olduğundan bahsetmiştim. Yazılım tamamen işlemci mimarisi ve diğer donanım birimlerine göre yazılır. Tabiki yüksek seviye programcıları bu kısımla alakalı düşünmezler. Çünkü onların yazdığı kodlar direk olarak makine diline çevrilerek çalışmaz. Örneğin C# kullanarak yazdığınız program derlenip çalıştırılacak seviyeye geldiğinde halen komut setleri halindedir ve makine dili içermez. Bu komut setlerini çalıştıran bir “framework” üzerinde çalışır. “.Net framework” bu yüzden vardır. Fakat bir C programı geliştirdiğinizde bu programı çalıştıracağınız cihazın donanımı, işlemcisi ve üzerinde eğer bir işletim sistemi varsa bu işletim sisteminin ne olduğu önemlidir.

Eğer işletim sistemi olarak Windows kullanıyorsanız, Windows için derlediğiniz bir C++ programı, aynı işlemci kullanan Linux ya da Mac işletim sisteminde çalışmayacaktır. Tabi eğer derlenecek programı sadece bizim yazdığımız kod olarak düşünürsek teorik olarak çalışması gerekiyor. Çünkü C++ derleyicisinin en temelde yaptığı iş kodumuzu direk olarak işlemcinin işleyebileceği makine diline çevirmektir. Fakat yazdığımız C++ kodu derlenecek programın genel olarak tamamından çok daha küçük bir bölümü oluşturur. “#include” direktifi ile eklediğiniz header dosyaları, o dosyaların refer ettiği kütüphaneler ve işletim sistemininin “runtime” için çağırdığı kütühaneler kodunuza dahil edilir. Doğal olarak eğer programınızı bir işletim sistemine ait C derleyicisi ile derlerseniz, işletim sistemi bağımlılığı olmuş olur.

Linux’ de GCC isminde bir C derleyicisi vardır. Açılımı “GNU Compiler Collection” olarak geçiyor. GNU projesi bünyesinde geliştirilmiş bir derleyici kollektifidir. İçerisinde sadece C/C++ değil, başka dillere ait derleyiciler de var. GNU denilen şey, “Özgür Yazılım” sloganıyla başlatılan bir akımdır aslında. Bu akım ile yazılan programlar, bir çatı altına toplanmış ve GNU yu oluşturmuş ve ayrıca bu akımla işletim sistemleri de geliştirilmiş. Mesela Debian işletim sistemi bir Linux GNU projesidir. Burada özgür yazılımdan kasıt, yazılan kodların açık olmasıdır. Ve isteyen, bu kodları alıp kendine göre şekillendirebilmeli.

Her neyse, GNU/linux dağıtımı olan bir işletim sistemi kullanıyorsanız C programlarınızı işletim sisteminde varsaylıan olarak kurulu gelen GCC ile derlersiniz. Örneğin yazdığımız şöyle bir kod olsun;

#include <stdio.h>
int main()
{
   printf(“hello world ”);
}

 

bu kodu “sudo nano” komutuyla oluşturduğunuz bir “main.cpp” dosyasına kaydedip;

gcc main.cpp -o executable

komutuyla derleyebilirsiniz. Bu çalıştırılabilir program, windows da çalışmaz. Bu yüzden bu programı windows’un kendi derleyicisi ve kendi kütüphaneleriyle derlemeniz gerekiyor. Eğer bu derlemeyi Linux üzerinde windows için yapmak istiyorsanız;

sudo apt-get install mingw32 mingw32-binutils mingw32-runtime

komutuyla sisteminize Mingw32 ismindeki windows C derleyicisini kurup windows için C kütüphanelerini edinmeniz gerekiyor. Bu sayede;

i586-mingw32msvc-g++ -o executable.exe main.cpp

komutuyla aynı programı windows için derleyebilirsiniz. Fakat bu programı çalıştıramayacaksınız.

Eğer programınızı farklı bir mikroişlemci için derlemek istiyorsanız o işlemcinin derleyicisini ve kütüphanelerini edinmelsiniz. Örneğin, raspberry pi gibi Arm mikro işlemci mimarisine sahip işlemcisi olan ve üzerinde linux işletim sistemi olan bir cihaz için C programı derlemek istiyorsanızi. Bu sefer Gcc-arm-linux derleyicisini edinmeniz gerekiyor.

Sudo apt-get install gcc-arm-linux-gnueabi
sudo apt-get install g++-arm-linux-gnueabi

 

komutlarıyla arm linux derleyicisi ve kütüphanelerini indirip.

gcc-arm-linux-gnueabi main.c -o executable

 

komutuyla programınızı arm linux platformlar için derleyebilirsiniz.

Yusuf

Yusuf

Bir Mühendis.

Önerilen makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Translate »