Autor Wątek: Wieloplatformowość.  (Przeczytany 3928 razy)

JCJ

  • Gość
# Listopad 04, 2008, 17:45:53
Witam!
Kiedyś napisałem taki głupi kursik nt. programowania pod platformę Windows używając Linuxa(z ponad 4 miechy temu, kurs został usunięty, nie miałem takiego doświadczenia jak teraz).
Zająłem się wtedy dalszą nauką C++.
Nie miałem czasu na wieloplatformowość.
I tu tkwi teraz mój problem. Chciałbym skompilować program pod różne platformy(M$ Windows, of korz, i jak się da pod Mac. :P) używając Linuxa(i C::B).
Neistety w wieloplatformowości jestem noobem.
Najlepiej żeby zrobić coś pod C::B. Słyszałem też coś o MiniGW, ale nei... Zresztą, nie ważne.


BTW.
Jeżeli się przyda - nigdy nie bawiłem się z make. Po prostu kompilowałem g++.
Np.
g++ start.cpp -o 1

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline lucypher

  • Użytkownik
    • Por Design

# Listopad 04, 2008, 18:07:28
Zaopatrzasz się w Mingw, najprostrze i najpopularniejsze rozwiązanie. Korzystasz jak z gcc, na przykład:
Cytuj
i586-mingw32msvc-g++ obrick.cpp etc.

Można ewentualnie bawić się w uruchamianie kompilatorów Windowsa pod wine ;) Mnie nawet działało.

Co do makefile, to możesz obadać mój skrypcik do generowanie maków z zależnościami etc. Sznurek tu i tu.

JCJ

  • Gość
# Listopad 04, 2008, 18:27:54
Zaopatrzasz się w Mingw, najprostrze i najpopularniejsze rozwiązanie. Korzystasz jak z gcc, na przykład:
Cytuj
i586-mingw32msvc-g++ obrick.cpp etc.

Można ewentualnie bawić się w uruchamianie kompilatorów Windowsa pod wine ;) Mnie nawet działało.

Co do makefile, to możesz obadać mój skrypcik do generowanie maków z zależnościami etc. Sznurek tu i tu.
O tym był mój głupiutki kursik. :D
Kompilowanie pod Wine jest podobno nie wydajne.

Pobawiem się z tym. Jakieś inne propozycje?

Offline lucypher

  • Użytkownik
    • Por Design

# Listopad 04, 2008, 18:47:29
A coś nie tak jest z mingw, że szukasz alternatywy?

JCJ

  • Gość
# Listopad 04, 2008, 18:54:28
Nie, nie szukam alternatywy. Ale na pewno są inne sposoby.

Offline skoti

  • Użytkownik

# Listopad 04, 2008, 19:23:16
Nie, nie szukam alternatywy. Ale na pewno są inne sposoby.
Tak naprawdę to nie ma ;p - mingw32 jest jedynym natywnym kompilatorem tworzącym exe na linuksie (inna możliwość to użycie mingw32 przez wine ale to jest bez sensu jak jest natywna wersja - z visualem wine ma problemy więc odpada).
Najlepiej sobie przygotować 3 kompilatory + 64bitowy linux
- mingw32 (powinien być w repo ważniejszych dystrybucji, jak nie to jest na sf.net) - tworzy exe dla windowsów 32bit,
- mingw-w64 (http://sourceforge.net/projects/mingw-w64/) - tworzy binarki dla windowsów 64bitowych,
- gcc stworzy nam wersje dla linuksa (64 i 32 bit)
Dodać do konfiguracji budowania (czy jak to się nazywa w c::b)/makefile dodatkowe opcje i w zależności od wersji podać nazwę narzędzi (* oznacza narzędzie np. g++, gcc, ld): i486-mingw32-* (i486 może być inne w zależności na jaką architekturę był kompilowany), x86_64-pc-mingw32-*, * -m32 (zadziała w większości przypadków - ze znanych mi dystrybucji tylko arch linux będzie miał problem (twórcy założyli sobie, że arch nie będzie systemem multilib i trzeba dodatkowy kompilator dla wersji 32bit dodatkowo)), *.

Co do macOS to google na szybko znalazł http://www.raccoonfink.com/fink/darwin-cross/, ale nie wiem jak to działa ;p
« Ostatnia zmiana: Listopad 04, 2008, 19:25:28 wysłana przez skoti »

JCJ

  • Gość
# Listopad 04, 2008, 19:25:03
Nie, nie szukam alternatywy. Ale na pewno są inne sposoby.
Tak naprawdę to nie ma ;p - mingw32 jest jedynym natywnym kompilatorem tworzącym exe na linuksie (inna możliwość to użycie mingw32 przez wine ale to jest bez sensu jak jest natywna wersja - z visualem wine ma problemy więc odpada).
Najlepiej sobie przygotować 3 kompilatory + 64bitowy linux
- mingw32 (powinien być w repo ważniejszych dystrybucji, jak nie to jest na sf.net) - tworzy exe dla windowsów 32bit,
- mingw-w64 (http://sourceforge.net/projects/mingw-w64/) - tworzy binarki dla windowsów 64bitowych,
- gcc stworzy nam wersje dla linuksa (64 i 32 bit)
Dodać do konfiguracji budowania (czy jak to się nazywa w c::b)/makefile dodatkowe opcje i w zależności od wersji podać nazwę narzędzi (* oznacza narzędzie np. g++, gcc, ld): i486-mingw32-* (i486 może być inne w zależności na jaką architekturę był kompilowany), x86_64-pc-mingw32-*, * -m32 (zadziała w większości przypadków - ze znanych mi dystrybucji tylko arch linux będzie miał problem (twórcy założyli sobie, że arch nie będzie systemem multilib i trzeba dodatkowy kompilator dla wersji 32bit dodatkowo)), *.
Oki, pobawiem się.
Teraz nie mam czasu.

BTW.
Będem miał Ubuntu 8.10. :D

JCJ

  • Gość
# Listopad 04, 2008, 19:30:49
Jeszcze jedno. Czy będę musiał "wytrzasnąć" z kądś dll'ki?
I czy linkowanie odbywa się jak w zwykłym g++??
Np.
[...] `allegro-config --libs --shared` [...]

Offline skoti

  • Użytkownik

# Listopad 04, 2008, 20:05:17
Jeszcze jedno. Czy będę musiał "wytrzasnąć" z kądś dll'ki?
I czy linkowanie odbywa się jak w zwykłym g++??
Np.
[...] `allegro-config --libs --shared` [...]
DLL i biblioteki dla danego kompilatora (bądź same biblioteki jak skompilujesz je statycznie ;p) - do mingw32 masz większość bibliotek przygotowanych (wrzucisz tylko do /usr/i486-mingw32/lib) - dla mingw-w64 musisz skompilować sam.

Odpowiedź na 2gie pytanie to tak (allegro-config --libs --shared zwraca coś w stylu -L/usr/lib -lallegro ..., w /usr/lib nie znajdzie kompatybilnych bibliotek, więc poszuka w swoim katalogu np. /usr/i486-mingw32/lib i tu znajdzie biblioteki, które potrzebuje ;])

JCJ

  • Gość
# Listopad 04, 2008, 20:07:39
Ok. Dzięki.
Pogrzebiem!
(Of korz, jak zainstaluję nowszą wersję Ubuntu)!

JCJ

  • Gość
# Listopad 05, 2008, 17:43:53
Dziś sprawdzałem - działa na Ubuntu 8.10!
Jeszcze raz wielkie dzięki.

P.S.
CO do Mac OS zobaczę.

Offline vashpan

  • Użytkownik
    • Strona

# Listopad 05, 2008, 20:47:29
Co do OSX:

Ten cross-compiler z linku wydaje sie byc nieco przestarzaly i prawie na pewno tylko dla architektury ppc, a obecnie OSX dziala tez pod x86, co powinno sprawe nawet uproscic.

Mysle ze wielkiego problemu nie powinno byc, kompilator tam to tez GCC ( lekko modyfikowany przez Apple ), wprawdzie pod OSX jest inny format plikow obiektowych ( nie ELF, a Mach-O, ale w koncu tak samo jest pod Windowsem - PE a nie ELF )

Nawet sie zastanawiam czy apple-gcc czasem nie mozna po prostu skonfigurowac i skompilowac tak aby byl cross-kompilatorem pod linuksem ( apple-gcc ma otwarte zrodla ). Oczywiscie dochodzi tez problem bibliotek, bo wiele z nich jest "proprietary".

Offline skoti

  • Użytkownik

# Listopad 06, 2008, 07:50:28
Co do OSX:

Ten cross-compiler z linku wydaje sie byc nieco przestarzaly i prawie na pewno tylko dla architektury ppc, a obecnie OSX dziala tez pod x86, co powinno sprawe nawet uproscic.

Mysle ze wielkiego problemu nie powinno byc, kompilator tam to tez GCC ( lekko modyfikowany przez Apple ), wprawdzie pod OSX jest inny format plikow obiektowych ( nie ELF, a Mach-O, ale w koncu tak samo jest pod Windowsem - PE a nie ELF )

Nawet sie zastanawiam czy apple-gcc czasem nie mozna po prostu skonfigurowac i skompilowac tak aby byl cross-kompilatorem pod linuksem ( apple-gcc ma otwarte zrodla ). Oczywiscie dochodzi tez problem bibliotek, bo wiele z nich jest "proprietary".
Pisałem, że nie sprawdzałem (podałem to co google wypluło na pierwszym miejscu) ;] - wersję dla maka nie tworzę przez crosskompilacje tylko odpalam gcc na moim macbooku ;p.

//Edit:
jak ktoś potrzebuje sobie zbudować gcc (host linux) dla ppc i x86 darwin9 to instrukcja znajduje się tu: http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt
« Ostatnia zmiana: Listopad 06, 2008, 08:54:18 wysłana przez skoti »