Вы можете использовать clang в качестве библиотеки для реализации JIT-компиляции, как указано в других ответах.
Затем вам нужно загрузить скомпилированный модуль (скажем, библиотеку .so).
Для этого вы можете использовать стандартный dlopen (unix) или LoadLibrary (windows) для его загрузки, а затем использовать dlsym (unix) для динамической ссылки на скомпилированные функции, скажем, функцию «script» main (), имя известно. Обратите внимание, что для C ++ вам придется использовать искаженные символы.
Портативная альтернатива, например, GNU's libltdl .
В качестве альтернативы «сценарий» может запускаться автоматически во время загрузки путем реализации функций инициализации модуля или размещения некоторого статического кода (конструктор глобально определенного объекта C ++ будет вызван немедленно).
Загруженный модуль может напрямую вызывать что угодно в основном приложении. Конечно, символы известны во время компиляции с использованием соответствующих заголовочных файлов основного приложения.
Если вы хотите легко добавить «плагины» C ++ в вашу программу и априори знать интерфейс компонента (скажем, ваше основное приложение знает имя и интерфейс загруженного класса из его .h до загрузки модуля в память) после динамической загрузки библиотеки класс будет доступен для использования, как если бы он был статически связан. Просто убедитесь, что вы не пытаетесь создать экземпляр объекта класса, прежде чем dlopen () его модуль.
Использование статического кода позволяет также реализовать удобные механизмы автоматической регистрации плагинов.