Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
1

Написание компилятора

01.10.2019, 17:49. Просмотров 2322. Ответов 36
Метки нет (Все метки)

Я работаю над игровым движком и когда допустим человек закончил создавать игру ему нужно создать ее. Как можно сделать создание exe в моем exe? То есть компиляция. Накиньте литературы или примеров. Хоть что то. Заранее спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2019, 17:49
Ответы с готовыми решениями:

Непонятное поведение компилятора
При запуске программы пишет build sucessful. При следующем запуске ничего не происходит: нету ни...

Написание простого компилятора
Хотел бы попробовать написать простенький компилятор, но не знаю с чего начать, помогите ссылкой на...

Внедрение компилятора
Собираюсь создать свой игровой движёк в стиле Quest3D или Uniti3D. На данный момент самый простой,...

Ошибка компилятора
Всем привет) У меня такая вот проблема с компилятором Сначала всё шло хорошо. Потом стала...

36
5455 / 3684 / 1530
Регистрация: 07.05.2019
Сообщений: 11,414
Записей в блоге: 1
01.10.2019, 20:30 2
Цитата Сообщение от Zumhad Посмотреть сообщение
Как можно сделать создание exe в моем exe?
А как ты создавал свой exe? Вызови те же команды и всё.
0
Эксперт С++
1797 / 1656 / 248
Регистрация: 03.05.2011
Сообщений: 3,823
Записей в блоге: 8
01.10.2019, 21:22 3
Цитата Сообщение от Zumhad Посмотреть сообщение
Накиньте литературы
держи PE Format
если подзапариться можно наваять PE Header, секции вставить из рабочей программы (если требуется, чтобы он запускался и что-то делал).
1
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
02.10.2019, 16:18  [ТС] 4
Я создавал в IDE
0
5455 / 3684 / 1530
Регистрация: 07.05.2019
Сообщений: 11,414
Записей в блоге: 1
02.10.2019, 16:20 5
Цитата Сообщение от Zumhad Посмотреть сообщение
Я создавал в IDE
В какой?
1
2664 / 1667 / 347
Регистрация: 09.09.2017
Сообщений: 6,928
02.10.2019, 16:41 6
Цитата Сообщение от Zumhad Посмотреть сообщение
Я работаю над игровым движком и когда допустим человек закончил создавать игру ему нужно создать ее
А что мешает оформить свой движок просто как библиотеку и пускай юзер просто с ней линкуется.
Другой вариант - использовать скриптовый язык, ему компиляция не нужна, просто в своей программе читаете этот скрипт и интерпретируете. Обычные языки для этого - Lua и Python. Хотя отдельные ценители могут хоть на bash игру писать.
Цитата Сообщение от Zumhad Посмотреть сообщение
Я создавал в IDE
То есть вы даже не представляете как работает компилятор. Попробуйте скомпилировать свою программу без IDE для начала. Те команды, которые вы наберете в консоли, потом можно будет скормить, скажем, функции system().
0
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
02.10.2019, 19:14  [ТС] 7
Ну буду дальше учиться. Хотя так и не понял что нужно

Добавлено через 2 минуты
Можете по подробнее объяснить про библиотеку. Если я сделаю библиотеку то игру же саму на чем то написать нужно и сам экзешник создать с файлами.
0
2664 / 1667 / 347
Регистрация: 09.09.2017
Сообщений: 6,928
02.10.2019, 23:03 8
Да, но тут уже будет огромный выбор готовых компиляторов и IDE. То есть юзер будет иметь возможность пользоваться тем, что ему удобно и в смысле языка, и компилятора и редактора. А ваш движок будет всего лишь еще одной библиотекой, которую придется подключить.
.
Но сразу должен предостеречь: движок штука сложная, а у вас проблемы с элементарными вещами. Очень сомневаюсь что вы хотя бы доведете проект до работоспособного состояния.
И более важный вопрос: что вас подвигло на написание движка? Просто желание изобрести велосипед (похвальное в плане обучения)? Или предположение, что сделать сначала движок, а потом на нем игру будет проще, чем монолитом? (пока нет опыта это неверно - не сможете оценить необходимый функционал). Или все же есть опыт разработки большого количества игр и вы уверенно можете выделить общие куски? (ох не верю)?
0
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
03.10.2019, 06:43  [ТС] 9
Просто я программирую всего 3 месяца а уже столько информации нашел. И решеним был компилятор g++. Только вот проблема. Я не знаю как компилировать без консоли. Автоматически без ide
0
2664 / 1667 / 347
Регистрация: 09.09.2017
Сообщений: 6,928
03.10.2019, 07:28 10
Лучший ответ Сообщение было отмечено Zumhad как решение

Решение

Цитата Сообщение от Zumhad Посмотреть сообщение
Просто я программирую всего 3 месяца а уже столько информации нашел.
Да заметно что немного. Нет, для трех месяцев может и порядочно, но для создания движка очень мало.
Цитата Сообщение от Zumhad Посмотреть сообщение
И решеним был компилятор g++.
Можно и так. Правда, не совсем понимаю как вы собираетесь подсовывать ему и свой код, и пользовательский и чем это лучше оформления в библиотеку.
Цитата Сообщение от Zumhad Посмотреть сообщение
Я не знаю как компилировать без консоли.
А как через консоль - знаете? Ну так в system() передаете ту же самую строку (в качестве строки может быть переменная).
C
1
system("gcc main.c -Os -gdwarf-2 -Wall -Wextra -o result");
Кстати, если на Линуксах с путями к gcc и прочим программам проблем не возникнет (стандартизация - великая вещь), но на виндовсе придется либо править %PATH% (пожалуй, лучшее решение), либо передавать в качестве аргумента. А есть ли уверенность, что gcc или любой другой компилятор у юзера установлен? Опять-таки, во многих линуксах это делается оформлением в пакет и прописыванием зависимостей.
0
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
03.10.2019, 09:19  [ТС] 11
Большое спасибо за помощь. Только я 90% инфы не понял) А что вы имеетве ввиде под оформлением в библиотеку?

Добавлено через 35 минут
Чтобы оформить движок в dll и он работал экзешником. Нужно создать сам экзешник.
0
2664 / 1667 / 347
Регистрация: 09.09.2017
Сообщений: 6,928
03.10.2019, 09:33 12
Цитата Сообщение от Zumhad Посмотреть сообщение
А что вы имеетве ввиде под оформлением в библиотеку?
Ну вы же можете использовать сторонние библиотеки. Скажем, для графики в игре хорошо подходит библиотека SDL. Она состоит из набора заголовочных файлов и нескольких статических библиотек (*.a для gcc или *.lib для msvs). Для использования вы линкуете ее к своему проекту, например в случае gcc флагом -l: gcc main.c -lSDL2
Вот так же и ваш код можно собрать в статическую (*.a / *.lib) или, что хуже, динамическую (*.so / *.dll), а потом юзер слинкует со своей программой.
.
Знаете, то, что вы пытаетесь что-то узнать, это похвально. Но лучше это делать не на помойках типа форумов или ютуба, а в нормальной литературе.
0
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
03.10.2019, 09:52  [ТС] 13
А у вас есть литература по компиляции и еще по генерации кода? И да я собираюсь использовать directX

Добавлено через 11 минут
Я просто немного дурачек. Можно поподробнее насчет библиотеки. Я знаю что и как это работает. Но как можнл это использовать чтобы создать игру??? Ведь нужно создать экзешник и взять весь функионал из dll. Но екзешник и длл могут поменяться в зависимости от того как программист создаст игру.
0
2664 / 1667 / 347
Регистрация: 09.09.2017
Сообщений: 6,928
03.10.2019, 11:10 14
Цитата Сообщение от Zumhad Посмотреть сообщение
А у вас есть литература по компиляции и еще по генерации кода?
Точную книгу не назову - свои знания я собирал несистемно: что-то тут, что-то там.
Цитата Сообщение от Zumhad Посмотреть сообщение
И да я собираюсь использовать directX
А чего не OpenGL? Старые версии проще в использовании (glBegin / glEnd), новые не менее эффективны, чем DX. Зато не будет привязки в windows.
Цитата Сообщение от Zumhad Посмотреть сообщение
Я просто немного дурачек.
Дурачки тут на форуме сыплют бесполезными темами "как написать хелло-ворлд, а то учусь в институте, а ни одного учебника не прочитал".
Цитата Сообщение от Zumhad Посмотреть сообщение
Но как можнл это использовать чтобы создать игру???
Еще бы знать как вы себе представляете функционирование своего движка...
Ладно, попробую максимально абстрактно.
Допустим, вы написали игру, например, стратегию. В ней можно выделить несколько блоков - ввод, вывод, правила игры (какие бывают здания, что в них можно делать), интерфейс (поверх блоков ввода-вывода), сетевое взаимодействие, звук, управление ресурсами и многие другие. Пока что игра монолитная, не имеет выделенного движка. Но вот отдельные модули уже стоит вынести, хотя бы для тестирования. Скажем, звуковому модулю сеть явно не нужна, его можно отлаживать чуть ли не в сферическом вакууме. То есть у вас есть, грубо говоря, файлы audio.c, net.c, graphics.c и т.д., которые вы потом просто компилируете вместе.
А теперь можно вынести в библиотеку ту часть игры, которая скорее всего понадобится в других играх: та же графика, ресурсы, сеть. Поскольку пока что они гвоздями прибиты к "монолиту", приходится их изменять, чтобы уменьшить количество зависимостей, абстрагировать одно от другого. Но это все равно такие же файлы исходного кода, ничем не лучше и не хуже других. Но вместо того чтобы напрямую подключать их к проекту, вы собираете из них библиотеку. Теперь это не отдельные файлы, а законченный "черный ящик", который можно подключить к другому проекту. Как-то так.
0
3 / 3 / 1
Регистрация: 20.03.2019
Сообщений: 150
03.10.2019, 17:35  [ТС] 15
Ну это я понял. Но вы сказали что Можно и так. Правда, не совсем понимаю как вы собираетесь подсовывать ему и свой код, и пользовательский и чем это лучше оформления в библиотеку.. А в чем возникнит проблема если я скомпилирую? И почему я не смогу соеденить пользовательский код и мой. У меня будет в движке функция update() в ней я буду все обновлять. А функция draw не доступна будет она будет частью движка она закрыта. И вот появился вопрос как создать кодом другой файл .cpp и записать туда пользовательский хкод?
0
2664 / 1667 / 347
Регистрация: 09.09.2017
Сообщений: 6,928
03.10.2019, 20:29 16
Цитата Сообщение от Zumhad Посмотреть сообщение
А в чем возникнит проблема если я скомпилирую?
Это будет зависеть от реализации. В общем-то, попробуйте, даже если не выйдет получите полезный опыт.
Цитата Сообщение от Zumhad Посмотреть сообщение
И вот появился вопрос как создать кодом другой файл .cpp и записать туда пользовательский хкод?
А в чем проблема? *.cpp это обычный текст. fopen / fprintf / fclose или аналогичное через плюсовые потоки.
2
2 / 2 / 1
Регистрация: 07.09.2019
Сообщений: 93
05.10.2019, 08:21 17
можно еще через винапи OpenFile ReadFile WriteFile, помоему за три месяца вы ничего невыучили в своем вузе, если даже незнаете как банально создать файл на плюсах, либо как вызвать команду system() чтобы выдать в CMD компилятору задание на компиляцию...читайте книги не по играм а по плюсам и по си ...это вам сейчас нужнее чем разбирать OpenGL или DirectX...покупайте студию 2019 за 100000 либо просто лицензию на Unity...и пишите себе игры...если вы незнаете как написать создание файла в плюсах вы не напишите ни игры ни компилятора...книг в сети полно...либо покупайте за свои казённые, для комерческого проекта полюбому GCC неподойдет у него права GNU на использование, а это значит открытый сорц,хотите заработать покупайте более серьезные среды с компиляторами...но у вас денег нехватит оплатить столько работы програмистов...сами вы напишите тетрис в то время как группа профессионалов за год способна написать GTA5 SKYRIM COUNTER STRIKE и так далее
0
2664 / 1667 / 347
Регистрация: 09.09.2017
Сообщений: 6,928
05.10.2019, 09:26 18
Цитата Сообщение от addedie Посмотреть сообщение
можно еще через винапи
Вот это плохой совет. Пока есть возможность писать простой и кроссплатформенный код, лучше это и делать.
Тем более что использование fopen / fread / fwrite / fprintf / fscanf / fclose проще, чем winapi'шных.
Цитата Сообщение от addedie Посмотреть сообщение
читайте книги не по играм а по плюсам и по си ...
Это само собой. Но если ТС хочет написать игру, книжки по ним тоже стоит читать. Чтобы понимать что и для чего делается, чтобы не пропала мотивация.
Другое дело, что начинать с "взрослых" игр явно не стоит, лучше сначала написать всякие тетрисы, змейки и т.п. Тем даже графика не нужна, достаточно текстового режима.
Цитата Сообщение от addedie Посмотреть сообщение
для комерческого проекта полюбому GCC неподойдет у него права GNU на использование, а это значит открытый сорц,хотите заработать
Что за чушь вы несете! gcc прекрасно можно использовать и в опенсорсных и закрытых проектах. ТС же не собирается лезть в исходный код компилятора (все равно не осилит), а компиляция с его помощью не накладывает ограничений на лицензию. Использование стандартных библиотек тоже: у них не gpl лицензия.
Цитата Сообщение от addedie Посмотреть сообщение
сами вы напишите тетрис в то время как группа профессионалов за год способна написать GTA5 SKYRIM COUNTER STRIKE и так далее
Что-то они подобные игры немножко не за год пишут. Хотя, конечно, там большая часть времени и не на кодинг уходит.
Но главное даже не это: "группа профессионалов" свои игры не с нуля пишет. У них есть старые наработки, а главное - знания и опыт. А у ТСа знаний и опыта нет, и их надо нарабатывать, иначе даже в команде он будет лишь балластом.
На данном этапе я бы еще раз посоветовал начать с чего-то простого, что вы совершенно точно* сможете написать. Когда получится, можно добавлять свистелки и полезные модификации. Скажем, к тому же тетрису добавить сетевой режим, аудио, анимацию, даже трехмерку.
*то, что вы думаете, что можете написать программу с легкостью еще ничего не значит. Как показывает мой опыт, в любом проекте встретятся подводные камни, в которые придется долбиться несколько дней с выражением лица "ну это же элементарная задача, почему она не получается?"
0
Модератор
1147 / 590 / 102
Регистрация: 23.07.2018
Сообщений: 1,870
Записей в блоге: 3
05.10.2019, 12:25 19
Цитата Сообщение от Zumhad Посмотреть сообщение
У меня будет в движке функция update() в ней я буду все обновлять. А функция draw не доступна будет она будет частью движка она закрыта. И вот появился вопрос как создать кодом другой файл .cpp и записать туда пользовательский хкод?
Коду не помешает, если кто-нибудь ещё будет на него посматривать умными глазами.
0
2664 / 1667 / 347
Регистрация: 09.09.2017
Сообщений: 6,928
05.10.2019, 13:29 20
Цитата Сообщение от politoto Посмотреть сообщение
Коду не помешает, если кто-нибудь ещё будет на него посматривать умными глазами.
Вы что, предлагаете выложить волшебный движок, убийцу Крузиса, Ведьмака и Марио - в опенсорс что ли?! Ну что вы, как можно!
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2019, 13:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Опции компилятора Gw/Gy
Может кто разъяснит на, что конкретно влияют опции компилятора Gw и Gy, когда их устанавливаешь...

Опции компилятора
Скажите пожалуйста, как можно проверить опции компилятора (с помощью макросов). Какие опции нужно...

Ошибка компилятора C3861
#pragma once #include <Windows.h> #include <TlHelp32.h> #include <comdef.h> struct PModule {...

Ошибка компилятора C2600
Здравствуйте. Такая ошибка:"c:\my documets\visual studio 2013\projects\step4\step4\step4.cpp(93):...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.