19 feb. 2013

Cross-Compilarea și rularea Win32 pe siteme Unix-like

Intro

    Utilizând un sistem de operare Unix-like, nu e prea mare plăcăre, ca în scopuri educative, să-ți părăsești, măcar  mediul pentru a utiliza Win32 API. Totuși, există posibilitatea de cross-compilare, față de care mulți sunt sceptici. În orice caz, compilez strict în scopuri educative, fără a reutiliza binarele în altă parte.


Necesitate

    Studiind cursul de "Event-Driven Programming on Win32 API", ar fi trebuit să-mi trag o mașină virtuală cu oarecare Windows și să-mi ridic tot environmentul meu preferat pe acea mașinică virtuală, ceea ce nu mi-a părut cea mai bună idee la prima vedere, dar e o ieșire din situație și asta.


Cerințe

Notă:  În distribuțiile linux veți găsi de obicei pachete precompilate cu mingw32-gcc și wine.


Utilizare


Compilăm în linia de comandă:
i386-mingw32-gcc -mwindows file.c -o file.exe

Executăm din linia de comandă:
wine file.exe

Ce poate fi mai simplu? ; )
În dependență de mediul de instalare și variabila $PATH probabil să fie necesară rularea compilatorului prin path absolut, sau ajustarea variabilei $PATH.
Plus, dacă utilizezi vim, poți mapa compilarea și executarea, unui shortcut, cum am făcut-o eu:
nmap <F8>:<C-U>!i386-mingw32-gcc -mwindows %:r.c -o %:r.exe && wine %:r.exe<CR>



Outro

    Utilitatea Cross-compiling-ului este extrem de mare. La fel putem compila produse spre exemplu pentru arm, sau oricare altă arhitectură de destinație. Acum poți compila același cod practic pe orice mașină.
    Happy programming!