Programy w C pod Linuxami


(renifer3) #1

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?


(Fizyda) #2

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.


(litestep) #3

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.


(renifer3) #4

Dziękuję bardzo za odpowiedzi :slight_smile:


(Te3ste3r) #5

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