Witam.
Jeśli istnieje taka możliwość to jak napisać program w języku C/C++ tak aby działał pod systemami Linux? Trzeba zrobić coś specjalnego czy wystarczy tylko unikać komend stworzonych dla Windows?
Witam.
Jeśli istnieje taka możliwość to jak napisać program w języku C/C++ tak aby działał pod systemami Linux? Trzeba zrobić coś specjalnego czy wystarczy tylko unikać komend stworzonych dla Windows?
W teorii jak używasz tylko STLa to tylko musisz go skompilować pod linuksem i tyle. Ale to w teorii, nie sprawdzałem w praktyce, ale raczej nie wprowadzam w błąd.
Problem zaczyna się gdy będziesz chciał używać np zewnętrznych bibliotek, integrować program z systemem lub bardziej takie specyficzne rzeczy jak np dynamiczne ładowanie bibliotek. W tedy musisz albo używać bibliotek skompilowanych pod dany system lub samemu skompilować o ile masz dostęp do kodu źródłowego no i o ile one nie są napisane pod konkretny system w tedy może być problem. Jak chcesz zintegrować już program z systemem, np dodać ikonkę do traya czy tam coś innego po linuxem to używasz odpowiedniego do tego interfejsu dla danego systemu. Co do ostatniego to różnica jest tutaj taka sama jak w reszcie, czyli najczęściej inna nazwa funkcji systemowej która ma załadować taką biblioteke, plus różnice w ograniczeniach pewne. W Windzie możesz załadować tylko dllki które znajdują się w tej samej lokalizacji co exe, natomiast w linuxie z tego co mi wiadomo można też z katalogów podrzędnych no i nie są to dllki tylko .so.
Inaczej się też będzie pisało usługi/service. Prosty program konsolowy powinien działać bez problemu na linuxie i windowsie oczywiście musisz go skompilować na odpowiednim systemie. Podobnie jak z pisaniem programów pod x64 i x84. Kod praktycznie ten sam, tylko w wyjątkowych przypadkach powinny być różnice, ale musisz skompilować pod odpowiednią wersją systemu, chociaż da radę skompilować 32bitowy program pod systemem 64bitowym.
W zasadzie nie ma większych problemów, są tylko pewne rzeczy o których musisz pamiętać.
Najlepiej używać wyłącznie typów o znanych pewnych,stałych rozmiarach czyli np. ‘uint64_t’ a nie ‘long long’, które może w sumie mieć dowolny rozmiar.
Przy błędach w programie (np. wychodzenie poza rozmiar zaalokowanej pamięci) Windows jest najczęściej odrobinę bardziej wyrozumiały, więc lepiej programy wieloplatformowe najpierw testować pod linuxem, szczególnie, że jest dostępny cudowny valgrind
. Pod 64bitowym linuksem (sprawdzałem CentOs i Ubuntu) nie powinno być problemu z budowaniem wszystkich wersji 4: linux32(gcc:i386), linux64(domyślne gcc) i mingw-w64 budujące dla win32 i win64.
Dziękuję bardzo za odpowiedzi
Może, nie musi. Można kompilować skośnie, czyli na inną architekturę niż ta na której odbywa się kompilacja.
Nieprawda, https://msdn.microsoft.com/pl-pl/library/7d83bc18.aspx