Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Michał Kozakiewicz (michal3)
Biblioteki C++

Cross-compiling na Windowsa

[lekcja]

Omówienie

Dla pełnego zrozumienia co przedstawię poniżej, wyjaśnię pojęcie cross-compilingu.
Cross-Compiling jest to generowanie kodu maszynowego czyli wykonywalnego, dla procesora/platformy innej niż ta na której działa cross-compilator. Upraszczając, jeśli chcesz korzystając z Linux'a, zbudować program dla Windows'a. Musisz użyć cross-compilatora.
Tym właśnie zajmę się teraz i opiszę to dla Ciebie. Będziesz mógł tworzyć program z użyciem biblioteki Allegro 5 z Linuxa, dla Windowsa. Jednak aby wykonać to, musisz przygotować dla siebie konsole MSYS2 z części 2, Allegro 5 - część 2. Następnie z części 3, Allegro 5 - część 3, wykonać wszystko do i z krokiem 4. Ja opisując ten post będę korzystać z maszyny wirtualnej którą przygotowałem w części 3.

Krok 1 - Logowanie jako root

Zaloguj się do systemu jako użytkownik z uprawnieniami root, w moim przypadku su hasło.

Krok 2 - Aktualizacja systemu

Zaktualizuj listę pakietów i system wydając polecenia


# apt-get update
# apt-get upgrade

Krok 3 - Instalacja cross-compilatora

Teraz należy zainstalować cross-compilator w wersji takiej jak mamy w konsoli MSYS2 na Windowsie. Jeśli podążałeś moimi wcześniejszymi postami, wydaj polecenie # apt-get install gcc-mingw-w64-i686.

Krok 4 - Przygotowanie bibliotek cross-compilatora

Po zainstalowaniu cross-compilatora, w katalogu /usr/i686-w64-mingw32 na Linuxie znajdą się dwa katalogi, include oraz lib.


W tych powyższych katalogach znajdują się pliki nagłówkowe oraz biblioteki, z których korzysta cross-compilator. Problem jest następujący, w katalogach powyżej brakuje sporej ilości plików. Pomyśl sobie ile trudu teraz zajęłoby pobieranie bibliotek i ich instalacja, następnie kompilacja biblioteki Allegro 5 z użyciem cross-compilatora i zainstalowanie jej w tych katalogach.

Ten problem da się rozwiązać inaczej, właśnie dlatego prosiłem Cię abyś przed wykonaniem tego, zainstalował konsole MSYS2 jak w części 2. Właśnie z niej skopiujemy gotowe już biblioteki, następnie wgramy je do tego katalogu.

Należy teraz skasować te dwa katalogi na Linuxie, unikniemy tym błędów podczas kompilowania, jeżeli na Linuxie byłaby inna wersja bibliotek niż w MSYS2. Nie martw się, MSYS2 zawsze dostarcza najświeższe wersje bibliotek, takie jakie lądują na Linuxie. W tym celu wydaj polecenia


# rm -rf /usr/i686-w64-mingw32/include
# rm -rf /usr/i686-w64-mingw32/lib

Przechodzimy teraz na Windowsie do katalogu gdzie zainstalowaliśmy MSYS2. W moim przypadku jest to C:\allegro5, następnie do katalogu mingw32 ponieważ potrzebna będzie nam wersja 32-bitowa.


W tym katalogu zauważysz katalogi include oraz lib, jeśli przejdziesz do kolejnego katalogu o nazwie i686-w64-mingw32 zauważysz kolejne katalogi include oraz lib. Skopiuj z katalogu mingw32 katalogi include oraz lib do wybranego przez siebie miejsca, następnie skopiuj katalogi o tych samych nazwach lecz z katalogu mingw32\i686-w64-mingw32 i dodaj ich zawartość do katalogów gdzie skopiowałeś wcześniej include oraz lib. Ja na tę potrzebę skopiowałem te katalogi do katalogu o nazwie C:\Users\Michal\Desktop\a. Katalog ten po scaleniu waży 480MB.

To nie wszystko, przejdź teraz tam gdzie skopiowałeś te katalogi do katalogu lib\pkgconfig. W moim przypadku jest to C:\Users\Michal\Desktop\a\lib\pkgconfig. W tym katalogu znajdują się pliki z rozszerzeniem .pc dla programu pkg-config. Program ten umożliwia łatwe dodawanie bibliotek dla kompilatora języka C/C++. Jest to ważne ponieważ w kolejnych postach z tego będziemy korzystać.

Na czym polega teraz problem? W plikach tych istnieje bardzo dużo odniesień do katalogu /mingw32.


Program pkg-config na Windowsie, wie po tym gdzie ma szukać plików nagłówkowych i bibliotek. Jako że my zmienimy lokalizacje tych bibliotek i na Linuxie będą one w katalogu /usr/i686-w64-mingw32. Musimy zmienić w tych plikach wszystkie wpisy /mingw32 na /usr/i686-w64-mingw32.

Problem jest prosty, ale może się wydawać czasochłonny przy tej ilości plików. Na wszystko jest sposób, opiszę ci w jaki sposób poradziłem sobie z nim. Jako że używam programu Notepad++ na Windowsie, skorzystałem z jego dobrodziejstw. W katalogu C:\Users\Michal\Desktop\a\lib\pkgconfig zaznaczyłem wszystkie pliki skrótem klawiszowym CTRL+A następnie kliknąłem prawym przyciskiem myszy i wybrałem opcje Edit with Notepad++. W programie otworzą się wszystkie pliki, następnie z górnego menu wybrałem opcje Szukaj -> Zamień.... Skrót klawiszowy do tego polecenia to CTRL+H.


Otworzy nam się okno, takie jak na obrazku powyżej. Wypełniamy pole Szukany tekst frazą /mingw32, następnie pole Zamień na frazą /usr/i686-w64-mingw32. Teraz Uwaga, klikamy tylko RAZ przycisk Zamień we wszystkich otwartych dokumentach. Na dole pojawi się napis w języku angielskim, informuje nas o przebiegu. Następnie klikamy w górnym menu ikonę dyskietek, aby zapisać zmiany we wszystkich plikach. Zamykamy program.

Krok 5 - Kopiowanie bibliotek pomiędzy systemami

Jeśli mamy przygotowany katalog include oraz lib jak w kroku 4, teraz musimy wgrać je do Linuxa do katalogu /usr/i686-w64-mingw32. Musisz teraz ten krok dostosować do siebie, jako że ja mam Linuxa wgranego w wirtualnej maszynie. Zalogowałem się z Windowsa za pomocą programu WinSCP do niego po protokole SSH. Pliki skopiowałem będąc zalogowanym jako użytkownik root.

Krok 6 - Test kompilacji

Teraz musimy przetestować czy wszystko działa poprawnie. W tym celu musimy mieć przykładowy program i go skompilować. Wszystko bardzo dobrze opisałem w części 3 w kroku 11. Przejdź do tego postu, wykonaj cały krok 11 a następnie wróć tutaj.

Będąc w Linuxie w katalogu workspace/01_allegro5test który opisałem w kroku 11 części 3. Wydaj polecenie make windows. Jeżeli proces przebiegnie prawidłowo, w katalogu workspace/01_allegro5test/bin/windows zobaczysz plik o nazwie program.exe. Aby uruchomić ten program w Windowsie, musisz dołączyć do niego pliki biblioteczne Allegro 5 oraz parę zależności od kompilatora. Możesz też ustawić zmienną PATH w Windowsie prowadzącą do tych plików. Trzecią możliwością jest uruchomienie programu za pomogą MSYS2.

Dodatkowe informacje

Sposobów na wykonanie tego co opisałem powyżej jest wiele, opisałem według mnie najprostszy. Nie wysyłam gotowych plików include oraz lib, które omawiałem jak należy przerobić na Linuxa. Ponieważ po pewnym czasie powstawałyby błędy, które wynikały by ze zmian wersji bibliotek itp. Kolejnym powodem jest, abyś poznał metodę jak radzić sobie z takim problemem i umiał sam aktualizować biblioteki dla siebie.
Poprzedni dokument Następny dokument
Instalacja Allegro 5 (Linux) Zależności biblioteki Allegro 5 i ich obsługa za pomocą pkg-config