1 / 1 / 1
Регистрация: 27.06.2014
Сообщений: 74
|
|
1 | |
Компиляция исходного кода в работающей программе07.07.2014, 16:21. Показов 3298. Ответов 47
Метки нет (Все метки)
Привет.
Подскажите, как можно скомпилировать код, и использовать полученный результат в запущенной программе, если этот самый код находится, в компоненте (memo, list итд - неважно) этой запущенной пргораммы. Я нашел 1 вариант - это сохранение этого кода в файл и компиляция в отдельном процессе. Это правильный вариант? и есть ли еще пути решения?
0
|
07.07.2014, 16:21 | |
Ответы с готовыми решениями:
47
Загрузка исходного кода и компиляция *.exe Компиляция исходного кода C++ ubuntu если нет компилятора g++ Исправить ошибку в программе, работающей с дробями Компиляция кода Freeglut |
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
07.07.2014, 16:35 | 2 |
То есть вы хотите написать компилятор? С графической оболочкой, где Memo и так далее? То есть вы хотите написать среду разработки.
0
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
07.07.2014, 16:38 | 3 |
1
|
1 / 1 / 1
Регистрация: 27.06.2014
Сообщений: 74
|
|
07.07.2014, 16:39 [ТС] | 4 |
SatanaXIII ,
не не, это мне не по силам. я хочу не компилятор написать, а узнать способ выполнения кода (и использования его результата в программе) в работающем приложении. Хотябы вариант, который я написал - возможен?
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
07.07.2014, 16:42 | 5 |
vlinx, вполне возможен.
Если компилятор поддерживает функции встраивания, то можно использовать их. Например в Clang такое есть. Еще можно посмотреть сюда.
1
|
1 / 1 / 1
Регистрация: 27.06.2014
Сообщений: 74
|
|
07.07.2014, 16:48 [ТС] | 7 |
Nick Alte, Интерпретация - это вариант с написанием своего компилятора так понимаю? тогда не подходит.
про JIT в с++ надо мне почитать, ничего про это не знаю Добавлено через 56 секунд Ilot, еще один момент - как в основную программу возвратить результат?
0
|
1 / 1 / 1
Регистрация: 27.06.2014
Сообщений: 74
|
|
07.07.2014, 16:54 [ТС] | 9 |
Ilot, да.
Ладно, надо попробовать - меньше вопросов будет)
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
07.07.2014, 17:05 | 10 |
Не обязательно. По моей ссылке есть пример как раз использования готового интерпретатора С.
JIT - это из той же оперы, только компиляция, а не интерпретация. У некоторых компиляторов есть инструментарий для встраивания в приложения. По сути это библиотеки, которые предоставляют набор API для организации процесса сборки. Добавлено через 8 минут Вот еще по ссылочка по теме.
0
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
07.07.2014, 17:07 | 11 |
Свой писать долго, лучше взять готовый. Такой вариант даёт наибольшую свободу.
По поводу JIT можно сказать, что это усиленный вариант интерпретации, когда вся программа или некоторые её фрагменты преобразуются в машинный код. А если мы говорим об использовании решения с компилятором, то лучше всего встраивать введённый код в шаблон DLL, которую затем можно будет загружать и вызывать.
1
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
07.07.2014, 17:08 | 12 |
Ну и если идти этим путем, проще прикрутить интерпретатор Перла/Питона и не парить себе мозг.
0
|
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,669
|
|
07.07.2014, 17:11 | 13 |
А для чего это нужно? Может просто использовать иное решение?
0
|
1 / 1 / 1
Регистрация: 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
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
07.07.2014, 18:18 | 16 |
Без специальных ухищрений и не получится (ну кроме целочисленного результата из main).
Если я правильно понял, то вариант 3) - это как раз модифицированный вариант 1). Компилятор вызывается, собирает код в dll, потом эта dll загружается в приложение и вызывается функция. Шаблон здесь конечно же не С++. Я думаю имелось в виду, что имена функций в dll и их сигнатура должны быть типовыми (т.е. строится по шаблону), иначе мы не будем знать что же нам вызывать в итоге. Добавлено через 5 минут А, и да. К четвертому варианту надо бы еще добавить и это. Там есть пример (main.cpp).
1
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
07.07.2014, 19:08 | 17 |
Коллега DrOffset совершенно верно пояснил эту идею вплоть до деталей.
2
|
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
|
|
07.07.2014, 19:55 | 18 |
Подкину ещё идею. Можно посмотреть в сторону встраивания скриптовых языков в программу, например Lua. Делается это намного проще.
0
|
1 / 1 / 1
Регистрация: 27.06.2014
Сообщений: 74
|
||||||
08.07.2014, 13:10 [ТС] | 19 | |||||
Руками собрал и скомпилил dll при помощи mingw, а вот с помощью CreatProcess не создается файл example_dll.o
0
|
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
|
|
08.07.2014, 13:17 | 20 |
0
|
08.07.2014, 13:17 | |
08.07.2014, 13:17 | |
Помогаю со студенческими работами здесь
20
Компиляция кода в приложении Компиляция кода в командной строке Компиляция кода с ромбовидным наследованием Компиляция кода под конкретную ОС Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |