Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
#1

Компиляция исходного кода в работающей программе - C++

07.07.2014, 16:21. Просмотров 1621. Ответов 47
Метки нет (Все метки)

Привет.

Подскажите, как можно скомпилировать код, и использовать полученный результат в запущенной программе, если этот самый код находится, в компоненте (memo, list итд - неважно) этой запущенной пргораммы.

Я нашел 1 вариант - это сохранение этого кода в файл и компиляция в отдельном процессе.
Это правильный вариант? и есть ли еще пути решения?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2014, 16:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Компиляция исходного кода в работающей программе (C++):

Загрузка исходного кода и компиляция *.exe - C++
Помогите разобраться как в Visual Studio 2010 загрузить исходный код для компиляции программы?

Компиляция исходного кода C++ ubuntu если нет компилятора g++ - C++
как запустить кода C++ в ubuntu если нет компилятора g++. код набран в текстовых файлах main.cpp func.cpp f.cpp func.h f.h в...

Исправить ошибку в программе, работающей с дробями - C++
#include <iostream> using namespace std; int main(){ int a,b,c,d,e,f; cout << "Введите первую дробь:/n"; cin >> a >> "/" >> b;...

Компиляция кода в приложении - C++
Можно каким-либо образом скомпилировать код в работающем приложении. Т.е. приложение работает, в него подается файл с исходным кодом, его...

Компиляция кода Freeglut - C++
Здравствуйте. Стоит Ubuntu 12.10, компилятор g++ , библиотеку freeglut поставил из репозитория, после чего инклуды появились нужном месте в...

Компиляция кода в командной строке - C++
на паре нам показывали как работать с прогой, написанной на ассемблере - cmd-> выбор директории -> создание объектного файла с помощью...

47
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
07.07.2014, 16:35 #2
То есть вы хотите написать компилятор? С графической оболочкой, где Memo и так далее? То есть вы хотите написать среду разработки.
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
07.07.2014, 16:38 #3
Цитата Сообщение от vlinx Посмотреть сообщение
Это правильный вариант?
Это будет работать.
Цитата Сообщение от vlinx Посмотреть сообщение
Есть ли еще пути решения?
Интерпретация и JIT.
1
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
07.07.2014, 16:39  [ТС] #4
SatanaXIII ,
не не, это мне не по силам.

я хочу не компилятор написать, а узнать способ выполнения кода (и использования его результата в программе) в работающем приложении.
Хотябы вариант, который я написал - возможен?
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
07.07.2014, 16:42 #5
vlinx, вполне возможен.
Если компилятор поддерживает функции встраивания, то можно использовать их. Например в Clang такое есть. Еще можно посмотреть сюда.
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
07.07.2014, 16:43 #6
В приложении создаете процесс с вызовом компилятора и передачей ему посредством командной строки файла с текстом программы. Мыслится так
0
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
07.07.2014, 16:48  [ТС] #7
Nick Alte, Интерпретация - это вариант с написанием своего компилятора так понимаю? тогда не подходит.

про JIT в с++ надо мне почитать, ничего про это не знаю

Добавлено через 56 секунд
Ilot, еще один момент - как в основную программу возвратить результат?
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
07.07.2014, 16:52 #8
Цитата Сообщение от vlinx Посмотреть сообщение
Ilot, еще один момент - как в основную программу возвратить результат?
Ну так любая не void функция возвращает результат, верно?
0
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
07.07.2014, 16:54  [ТС] #9
Ilot, да.
Ладно, надо попробовать - меньше вопросов будет)
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
07.07.2014, 17:05 #10
Цитата Сообщение от vlinx Посмотреть сообщение
Интерпретация - это вариант с написанием своего компилятора так понимаю?
Не обязательно. По моей ссылке есть пример как раз использования готового интерпретатора С.
JIT - это из той же оперы, только компиляция, а не интерпретация. У некоторых компиляторов есть инструментарий для встраивания в приложения. По сути это библиотеки, которые предоставляют набор API для организации процесса сборки.

Добавлено через 8 минут
Вот еще по ссылочка по теме.
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
07.07.2014, 17:07 #11
Цитата Сообщение от vlinx Посмотреть сообщение
Интерпретация - это вариант с написанием своего компилятора так понимаю?
Свой писать долго, лучше взять готовый. Такой вариант даёт наибольшую свободу.
По поводу JIT можно сказать, что это усиленный вариант интерпретации, когда вся программа или некоторые её фрагменты преобразуются в машинный код.

А если мы говорим об использовании решения с компилятором, то лучше всего встраивать введённый код в шаблон DLL, которую затем можно будет загружать и вызывать.
1
Renji
1963 / 1361 / 307
Регистрация: 05.06.2014
Сообщений: 3,893
07.07.2014, 17:08 #12
Nick Alte, Интерпретация - это вариант с написанием своего компилятора так понимаю?
Только парсера. Программа сама разбирает текст, сама же его и исполняет. Код для процессора при этом не генерируется. Запуск кода скорее всего произойдет быстрее (не нужно гонять по нему оптимизаторы и прочую муть), но сам код будет тормознутее. Впрочем, не факт что вы это заметите (была миллисекунда, стало десять).

Ну и если идти этим путем, проще прикрутить интерпретатор Перла/Питона и не парить себе мозг.
0
nmcf
5521 / 4831 / 1636
Регистрация: 14.04.2014
Сообщений: 19,616
07.07.2014, 17:11 #13
А для чего это нужно? Может просто использовать иное решение?
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
07.07.2014, 17:14 #14
vlinx, Вот отличная статья на тему встраивания этого интерпретатора. Как раз показано как вернуть результат интерпретируемой функции в основную программу.
1
vlinx
1 / 1 / 0
Регистрация: 27.06.2014
Сообщений: 74
07.07.2014, 18:03  [ТС] #15
Собрал предложенные варианты:

1) Создание процесса, и вызов компилирования строки(кода).
2) JIT
3) встраивать введённый код в шаблон DLL
4) Использование стороннего интерпретатора(Ch)

Поробовал 1) - но пока не получилось возвратить результат в программу.

Больше всего мне нравится 3).
Впринципе, делать dll и запускать их умею. Nick Alte, тут речь идет не про шаблоны c++? Если нет, то где почитать про процесс встраивания кода в шаблон dll?

Добавлено через 47 секунд
DrOffset, Ваш вариант попробую позже

Добавлено через 8 минут
@nmcf , хочу сделать некий генератор тестовых данных. Продумал систему классов, наследование, композиция и все такое. И вот один из типов(классов) генераторов будет - генерация по введенному пользователем алгоритму, который будет принимать в качестве параметра строку - код, и возвращать строку - значение.

Добавлено через 5 минут
Renji, с питоном пробовал, нормально. Теперь хочу сделать не с питоном
0
07.07.2014, 18:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2014, 18:03
Привет! Вот еще темы с ответами:

Компиляция C++ кода через консоль - C++
Есть простенький код: #include <iostream> #include <vector> int main(int argc, char *argv){ std::vector<int> vec; int num=1;...

Компиляция кода... не могу сообразить. - C++
Доброго времени суток уважаемые форумчане! Прошу помочь с решением проблемы: есть исходники memtest86+, скачал чтоб разобраться как...

Компиляция кода под конкретную ОС - C++
Есть ОС Windows, Linux, Android. Хочу понять базовые знание по тому как делается библиотека работающая на всех ОС. Допустим пишем...

Компиляция кода с ромбовидным наследованием - C++
Здравствуйте. Я написал элементарное наследование. На VS 2015 всё компилится, а на CLion нет. В чём может быть проблема? class A { ...


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

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

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