Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Valleri avatar Valleri 304 Точки

Създаване на executable за множество платформи

Здравейте! 
В една от първите лекции зададох този въпрос във слайдо, но явно не съм избрал точните думи. 
Да кажем, че вече сме разработили играта и искаме да я раздадем на 5 приятели - първия ползва Уиндоус, втория ползва Мак, третия ползва Линукс дистрибуция, четвъртия има само Плейстейшън, а петия предпочита да играе в браузъра.

Ние, като програмисти, работим да речем на Линукс и вече сме си написали играта, при нас работи. Добре, но има ли някаква "поточна линия" в практиката, която да билдва 5-те версии на играта, по една за всяка платформа?
Ръчен процес ли е? Тоест, дърпаш сорс кода на дадените операционни системи, създаваш executables и ги пускаш на приятелите си.
Звучи ми като нещо, което може да бъде автоматизирано.

П.С. Изхождам от предположението, че не можеш да билднеш Уиндоус .ехе на Мак, например, та затова изключвам варианта всичките 5 версии да се билднат на девелопърската ОС, каквато и да е тя.

Въпроса ми е директно към Живко, понеже има професионален опит във сферата, но който се чувства компетентен може да даде мнението си.

Съжалявам за изгубеното време, ако е коментирано в някоя лекция и съм го пропуснал.

Тагове:
1
C++ Applications Development
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, Валери,

Супер въпрос.
Искам само да кажа, че не бива да го насочваш само към мен.
Както спомеваш и сам - нека всеки, който иска да изкаже мнение, дори и некомпетентно.

За жалост няма да можа да ти помогна тук с опит, защото нямам директен такъв в сферата на редистрибютирането на програми до крайния потребител.
Мога да ти кажа, какво съм чел :)
Ще се радвам, ако някой с опит в тази сфера се включи.

Софтуерното инженерство е океан от възможности. Но можеш да огрееш навсякъде.
Целият ми професионален опит е минал в продуктови компании, където изграждаме собствен хардуер и софтуер.
Крайният потребител получава хардуера с инсталиран софтуер на него и това е.
Т.е. ние не раздаваме софтуера на потребителят по същият начин, по който човек би си инсталирал една програма.

Отделно, в днешно време е много модерно кода, който пишат програмистите да се разботва в Docker контейнери.
Ако не си ги чувал - представи си мини версия на виртуална машина.

=====================
Сега обаче се връщам на твоя въпрос - как да билдна една програма на 5 ОС-а?
За жалост това далеч не е просто.
Всяка ОС е коренно различна от останалите.
Binary-тата са единият проблем. Другият проблем са всичките зависимости, които идват заедно с тях.
Например SDL в нашия случай. SDL пък е wrapper на low-level graphical API.
Дали ще имаш същия low-level graphical APi на всичките системи?
Най-вероятно не.

Всяка ОС си има някакъв начин за редистрибютиране на софтуер.
Да кажем на Linux ние бихме пакетирали нашата промрама в .deb пакет, който в последтвие user-а да може да инсталира.
При Windows бихме разработили installer (което също не е лесно), който да се грижи да инсталира нашата програма.

Аз поне не се сещам да има някакъв туул, с който магически да можеш да приготвиш твоя софтуер за различни ОС.

Доста компании/големи тулове - напр. game engines го постигат, но това е защото имат 3 вагона специфичен код написан за целта.

===============
Накрая, но не последно място няма как да не си чувал следния казус.
Някаква компания има игра разработена за конзола. За примера - PlayStation.
Същата игра, обаче не може да се ползва директно на PC.
Отнема няколко седмици/месеца работа да се направи "PC port".
Т.е. да се заменят PlayStation спецификите с такива за дадения ОС на PC.
И PlayStaion версията не върви по същиият начин както PC версията :)

Мисля да спра до тук.
Поздрави
 

1
Valleri avatar Valleri 304 Точки

Благодаря на отговора и на Живко и на колегата krustevk!
Представях си нещо като докер пайплайн, какъвто ползвам в дистрибутирането на джава приложения, но не мисля че има докер имиджи за уиндоус и Плейстеишън.

Изненадах се, че все още остават съмнения за крос-платформеността. Мислех си че библиотека като SDL + нашите усилия ще се погрижат приложението да е крос-платформено, тоест, тегля играта която разработвам на линукс на другия ми компютър с Уиндоус и само я рекомпилирам. Само че преди това трябва да съм си сетъпнал SDL библиотеките на Уиндоуса за да може CMAKE да ги намери...

0
j.petrov_90 avatar j.petrov_90 373 Точки

Привет, Валери,

Представи си някой от любимите ти игри.
Сега си отговори на този въпрос: 
Можеш ли директно да ги подкараш на Linux? Или на PlayStation? Или на Xbox?
Най-вероятно не. Освен, ако самата игра няма специален порт за дадената ОС/архитектура.

Поздрави

 

1
krustevk avatar krustevk 4 Точки

Привет,

наистина хубав въпрос.

За да могат приятелите ти да стартират приложението/играта на различни системи ще е необходимо да компилираш програмата за всяка ОС - exe за windows, bin за linux и т.н. За целта ти трябва компилатор за съответната ОС - Visual C++, MinGW....за windows, GCC за linux и т.н. Може да използваш кросплатформени фреймуърци, като например Qt. Аз ползвам Qt от години и едно приложение направено под linux в повечето случай само се прекомпилира за windows (сменяш компилатора обаче). За игри обаче ще е малко по различно ... зависи какви библиотеки/енджин ползваш и дали имат порт за другите ОС. За браузърна игра обаче ще ти трябва JavaScrip....тук С++ може да помогне единствено в часта за backend-a, като даже не много желан и за там.

Дано съм бил полезен с отговора.

3
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.