- Symulator MaSzyna -

Symulator EU07 (i nie tylko) => Na warsztacie => Wątek zaczęty przez: Łakasabasz w 01 Sierpnia 2017, 13:08:54

Tytuł: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Łakasabasz w 01 Sierpnia 2017, 13:08:54
Witam,

Chciałem się zabrać za uniezależnienie exe od Visual Studio i kompilatora Windowsa. Po modyfikacji będzie można programować na kompilatorze MinGW i przy użyciu IDE typu code::blocks, a później to już tylko krok do wersji Maszyny na Linuxa. To wiąże się z kilkoma zmianami. Pierwszym problemem na który się natknąłem jest DirectX. To biblioteka wyłącznie pod Windowsa (o ile coś się nie zmieniło) i potrzebna jest jakaś alternatywa do obsługi dźwięku i grafiki. Stąd moje pytanie: Zna ktoś jakąś bibliotekę (lub biblioteki), która może zastąpić DirectX tak aby nie odbiło się to znacząco na jakości?

Jak skompletuje biblioteki to rozpocznę porządki w dyrektywach typu #define i #pragma.
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Stele w 01 Sierpnia 2017, 13:20:38
Milek kompiluje już exeki na linuksie. Nieme, ale ponoć działają. DirectX jest używany tylko do dźwięku.
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Łakasabasz w 01 Sierpnia 2017, 13:43:38
W takim razie napiszę do niego, a @firleju napisał mi na priv że maszyna nie jest dostępna na linux.

Edit: Odwiedziałem się że mój pomysł nie został jeszcze zrealizowany, więc moje pytanie jest nadal aktualne. Milek nie używa żadnego ide, więc mój pomysł na dostosowanie maszyny pod mingw i c::b (nie gcc) jest jeszcze możliwy do zrealizowania. Wracając do pierwotnego pytania to jeżeli DirectX jest tylko do dźwięku (SFML może być alternatywą).
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: kolejarz2009 w 01 Sierpnia 2017, 14:52:57
Jeśli się dobrze orientuje, to SDL może pomóc przy dodaniu obsługi wielu O.S. do MaSzyny. Piszą że SDL obsługuje audio, grafike itp.
Sam nigdy się tym nie bawiłem

https://libsdl.org (https://libsdl.org)
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Milek7 w 01 Sierpnia 2017, 16:14:27
o, nie zauważyłem wątku.
obecnie pod linuxa przystosowany jest mój branch z shaderami. do kilku dni myślę że zrobię merge z tmj tak żeby było kompatybilne z najnowszym patchem. dźwięk obecnie jest na directsound, na buildzie linuxowy zastąpiony atrapą. obecne plany są takie żeby do dźwięku użyć openal-soft i libsndfile do ładowania plików.
sam mam to w planach zrobić, ale nie w najbliższym czasie więc jak komuś się chce to może zrobić.

a co do samej kompilacji pod mingw to pewnie jest to możliwe do zrobienia nawet teraz z directsoundem. cmake powinien potrafić wygenerować makefile czy pliki projektu jakiegoś ide, trzeba tylko przekompilować zależności pod mingw. ale ja tym się nie będę zajmował bo mi to niepotrzebne.
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Łakasabasz w 01 Sierpnia 2017, 19:27:01
@Milek7 cmake wywala mi błąd
CMake Error at G:/utilitis/cmake-3.9.0-rc5-win64-x64/share/cmake-3.9/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
 Could NOT find GLEW (missing: GLEW_LIBRARY)
Mam mu podać ścieżkę do \ref\glew\include czy co innego, bo zgupłem...
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Milek7 w 01 Sierpnia 2017, 19:43:15
no ścieżkę do .lib (dla gcc to może .a) z GLEW. możesz dla przykładu zobaczyć do tych .batów dla visuala.
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Łakasabasz w 02 Sierpnia 2017, 15:03:30
Masakra

Według wzoru na szanse skompilowania programu (S = 10/K^3 gdzie S to szansa, K to ilość kodu) nie miało prawa mi się udać, mimo że pobrałem, zbudowałem i podłączyłem chyba z 5 różnych bibliotek. Wywala mi błąd przy kompilowaniu pliku projektu. Na cmake się nie znam, więc może mi ktoś wytłumaczyć co walło?.

Plik Makefile2
CMakeFiles/eu07++ng.dir/all:
$(MAKE) -f CMakeFiles\eu07++ng.dir\build.make CMakeFiles/eu07++ng.dir/depend
$(MAKE) -f CMakeFiles\eu07++ng.dir\build.make CMakeFiles/eu07++ng.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=G:\projekty\maszyna\CMakeFiles --progress-num= "Built target eu07++ng"
.PHONY : CMakeFiles/eu07++ng.dir/all
Błąd w 2. lini.

Oprócz tego w projekcie wygenerowanym przez cmake nie ma ani 1 pliku źródłowego...
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: carmel4a w 02 Sierpnia 2017, 16:48:14
Według mnie SFML tu nie zadziała, bo z tego co pamiętam nie jest modularny (trzeba by całego main loop'a przebudować). OpenAl?
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Milek7 w 02 Sierpnia 2017, 16:53:20
no ale to wstawiłeś kawałek wygenerowanego makefile, a jaki błąd? pokaż jeszcze argumenty do cmake i to co wypisał.
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Łakasabasz w 02 Sierpnia 2017, 18:05:30
Błąd podczas kompilowania:
recipe for target 'CMakeFiles/eu07++ng.dir/all' failed
Warningi podczas generowania:
Found ZLIB: optimized;C:/Windows/zlib1.dll;debug;G:/utilitis/zlib-1.2.11/libzlib.dll (found version "1.2.11")
Configuring done
CMake Error at CMakeLists.txt:77 (add_executable):
  Cannot find source file:

    shader.cpp

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx


CMake Error: CMake can not determine linker language for target: eu07++ng
CMake Error: Cannot determine link language for target "eu07++ng".
Generating done

Plik Makefile2 i Log kompilacji w załącznikach
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Milek7 w 02 Sierpnia 2017, 23:50:02
eh.. przecież pisze jak byk, że brakuje pliku shader.cpp
próbujesz tego cmake na moich źródłach czy innych? bo jak nie na moich to musisz usunąć te pliki których nie ma z CMakeLists. najlepiej zacznij od moich a później się baw z innymi.
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Łakasabasz w 03 Sierpnia 2017, 14:31:01
Pobrałem twoje repo z git.eu07.pl i stworzyłem projekt, który nie działa...
Wywala błąd na #include <ddraw.h> i <dsound.h>
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: carmel4a w 03 Sierpnia 2017, 15:01:02
Nie jestem aktywnym programistą cpp, ale coś siedziałem. CO oznacza:
Cytuj
Wywala błąd na #include <ddraw.h> i <dsound.h>
? Programowałeś coś w cpp? Bo coś mało informacji o błędach podajesz. Błąd linkera, nie chce się skompikować, brak plików?
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Milek7 w 03 Sierpnia 2017, 16:48:32
Pobrałem twoje repo z git.eu07.pl i stworzyłem projekt, który nie działa...
Wywala błąd na #include <ddraw.h> i <dsound.h>
tam chyba jest trochę stary kod, tu jest aktualny: https://github.com/Milek7/maszyna/tree/shadowdupa (wieczorem zrobię pusha i tam)

no a z tymi includami to musisz poszukać jak się używa directsounda w mingw, na pewno potrzeba ściągnąć toolkita sdk i dodać ścieżkę do nagłówków, a jak to zlinkować to nie wiem.
albo możesz skompilować bez dźwięku (zmień ifdefy w Sound.h, Sound.cpp i winheaders.h)
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Łakasabasz w 05 Sierpnia 2017, 18:45:37
@carmel4a Co do SFML: nie, jest modułowy. Moduł systemowy - wątki i obsługa czasu, moduł graficzny - grafika 2d, moduł muzyczny - obsługa dźwięków, moduł internetowy - obsługa HTTP, FTP, UDP, TCP. Z powodzeniem wykorzystywałem moduł systemowy w aplikacjach konsolowych bez użycia grafiki, muzyki. Tak samo z modułem internetowym.
Co do błędów to gdy pojawia się error przy #include oznacza wyłącznie błąd kompilatora. Linker nawet się nie włączy. Powiem rzecz oczywistą dla osób, które kiedykolwiek cokolwiek coś zakodziły w c++, przy procesie kompilacji najpierw uruchamia się preprocesor, później następuje właściwa kompilacja kończona plikiem .o, a na koniec uruchamia się linker (plik .o na .exe). Tak więc #include to komenda preprocesora i błąd nie pozwala na dalszą kompilację.
Tytuł: Odp: Exe - uniezależnienie od Windowsa
Wiadomość wysłana przez: Łakasabasz w 05 Sierpnia 2017, 18:48:54
P.S Admin/(Moderator forum) nie mogłem edytować poprzedniego postu...

@Milek7 Nie trawię DirectX-a. Spróbuję więc wymienić go na SFML-a.