LINUX.ORG.RU

Выполнение загружаемого кода из программы

 


1

3

Есть программа на C++, в которую будет подгружаться алгоритм в .cpp файле. Допустим, что в нем всегда присутствует метод Do(). Необходимо выполнить Do() из программы. Как это можно реализовать? Не прошу полностью рассказывать решение - только натолкнуть на мысль/подсказать ключевые слова для гугления. Спасибо.


Ничего не понятно

Тебе надо в плагины?

Stil ★★★★★
()
Ответ на: комментарий от Balantay

Так автор же хочет исходник грузить, а не библиотеку динамически подгружать. Хотя есть вероятность, что этого ему хватит

Deleted
()
Ответ на: комментарий от Balantay

man dlopen

На сколько я понял, это подгружает библиотеку. Это не мой случай - мне дают на вход нескомпилированный исходный код, который я должен выполнить из своей программы.

тебе надо в плагины

Нет, совсем не то. Парой строчек выше я вроде прозрачнее изъяснился.

maked0n
() автор топика

скомпилировать как .so, подгрузить, вызвать Do(). Скомпилировать как исполняемый файл из загруженного файла и шаблонного кода с функцией main(), вызывающей Do(), вызвать скомпиленное через system()

Harald ★★★★★
()
Ответ на: комментарий от Deleted

Ну, собирать исходник скорее всего придется, а если уже собирать - то невелика разница в приложение или в библиотеку

Balantay
()
Ответ на: комментарий от Deleted

Хотя есть вероятность, что этого ему хватит

Увы, нет. Если бы мне нужно было подгружать библиотеку - я бы не лез за советом на форум :)

maked0n
() автор топика
Ответ на: комментарий от maked0n

Если на входе исходник - то его нужно или собирать (неважно, заранее или во время работы приложения), или скармливать интерпретатору.

Balantay
()
Ответ на: комментарий от maked0n

Это не мой случай - мне дают на вход нескомпилированный исходный код, который я должен выполнить из своей программы.

Какая-то_Дичь.jpg

А сменить .cpp на .py/.lua/.js никак нельзя? Тогда как здесь (Выполнение загружаемого кода из программы (комментарий)). Можешь покурить clang&llvm и встроить а софтину компилятор плюсов %)

Stil ★★★★★
()

на С++ ничего не могу сказать, но:

а)есть транслятор с С++ на Си(не помню как называется)

б)есть TinyC - с библиотекой в которой можно на ходу и очень-очень быстро(ядро собирается за 10 сек) скомпилить код и тут же запустить.

в)надо предусмотреть вызов mprotect для установки бита выполнимости на полученные байты кода.

i36_zubov
()
Ответ на: комментарий от eao197

OMG, значит ТС не одинок в своих извращениях 😮

Stil ★★★★★
()
Ответ на: комментарий от Stil

почему дичь, может ТС какую-нибудь прогу для автоматизированного тестирования на знание С++ пишет, или для конкурса какого-нибудь, там всегда исходники загружаются, а не бинарники

Harald ★★★★★
()

Сохраняй код во временный файл и вызывай компилятор как внешний процесс. После этого либо таким же образом запускай полученный бинарник, либо собирай с -shared и подгружай через dlopen().

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от maked0n

мне дают на вход нескомпилированный исходный код, который я должен выполнить из своей программы.

У вас что-то серьезно идет не так.

invy ★★★★★
()

а о безопасности вы подумали?

exception13 ★★★★★
()
Ответ на: комментарий от CatsCantFly

Больше всего здесь интересно то, зачем это все.

Собственно, тут за меня ответили:

почему дичь, может ТС какую-нибудь прогу для автоматизированного тестирования на знание С++ пишет, или для конкурса какого-нибудь, там всегда исходники загружаются, а не бинарники

Спасибо всем за помощь. Думаю, тему можно считать закрытой. Пометил как решенное.

maked0n
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.