У меня есть прототип функции в файле. Есть ли способ создать указатель на функцию, прочитав файл во время выполнения в c++?
Вы правильно ищете libffi, из Википедии:
libffi - это библиотека интерфейса внешних функций. Он предоставляет интерфейс языка программирования C для вызова изначально скомпилированных функций, данных информации о целевой функции во время выполнения, а не времени компиляции. Он также реализует противоположную функциональность: libffi может создавать указатель на функцию, которая может принимать и декодировать любую комбинацию аргументов, определенных во время выполнения.
Нет. Прототип функции - это просто утверждение о том, как используется функция; он не может быть выполнен сам по себе.
Если у вас есть имя функции, и вы хотите превратить ее в указатель на функцию, вы можете сделать это, используя dlsym(RTLD_DEFAULT, "fn")
. Не рекомендуется.
Вы можете использовать системный вызов (используя system
функцию стандартной библиотеки) для вызова компилятора, который создает динамическую библиотеку из вашего функционального файла. Затем вы можете загрузить библиотеку с помощью dlopen
или LoadLibrary
, в зависимости от платформы.
EDIT: Конечно, это не сработает, если у вас действительно есть только прототип, а не определение. В этом случае я сожалею, что неправильно понял ваш вопрос.