Cross Platform Programlama

Cross platform programlama (ya da derleme,compiling), Linux altında Windows’ta çalışacak uygulamalar geliştirmek olarak tanımlanabilir. Yani development yaparken kullandığınız makine linux tabanlı olup hedef aldığınız makine windows tabanlı olacak şekilde program geliştirme. Benim aklımı kurcalayan birbirinden farklı özelliklerdeki işletim sistemlerinde çalışacak kodları nasıl aynı derleyecinin üretebileceği. Sonradan araştırdım ve gördüm ki zatan aynı derleyici kullanılmıyormuş.
Windows altında yaygın olarak kullanılan Mingw derleyicisinin linux versiyonuda mevcut. Linuxte windows aplikasyonları geliştirmek için bu derleyiciyi linux’e yüklemek gerekiyor. Bunun için;

  • $ sudo apt-get install mingw32

Bu komutla derleyiciyi linux işletim sistemine yükledikten sonra derleyiciyi i586-mingw32msvc-gcc komutu ile kullanıyoruz. Linux altında kullanılan gcc’den çokta bir farkı yok. Aynı özelliklerin çoğu geçerli. (-o, -c, -g, -Wall gibi…).

Hello.c

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
 printf("Hello World!n");
 system("PAUSE");
 return 0;
}

Kodu derlemek için ise

  • $ i586-mingw32msvc-gcc Hello.c -o hello.exe

Farklı bir örnek yapmak gerekirse;

Other.c

#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
 struct timeval tm;
 struct timezone tz;
 int x = gettimeofday(&tm,&tz);

 if( x &lt; 0){
 printf("Error x = %d\n",x);
 }
 else{
 printf("Tv_sec = %ld\n",tm.tv_sec);
 }

 system("PAUSE");
 return 0;
}

Kodu derlemek için:

  • $ i586-mingw32msvc-gcc Other.c -o other.exe

Son olarakta daha windows’a yönelik bir uygulama örneği yapalım. Bu örnek için windows.h kütüphanesini kullanalım.

MsgHello.c

#include <windows.h>

int main(int argc, char *argv[])
{
 MessageBox(NULL, "Hello, world!", "Hello, world!", MB_OK);
 return 0;
}

Yine bu kodu derlemek için

  • $ i586-mingw32msvc-gcc MsgHello.c -o msghello.exe

Bu örnekleri istenilirse linux altında Wine kullanarak çalıştırabilir ya da benim yaptığım gibi windows altına atıp windowstan çalıştırılabilir.

Program geliştirirken ikide bir derleme komutu yazmak zor geliyor. Onun genelde Makefile kullanıyorum. Güzel tarafı i586-mingw32msvc-gcc komutuna göre hazırlanmış bir makefile’ı rahatlıkla kullanılabilir. Örneğin;

Makefile

all:
i586-mingw32msvc-gcc Hello.c -o hello.exe

Sonra bu Makefile  $ make komutu ile rahatlıkla kullanabilir. Tabi isteğe bağlı olarak daha gelişmiş, daha fazla özellikler sunan bir makefile’da yazılabilir.

End Of Line