У меня есть программа на С++, которая может генерировать LLVM IR во время выполнения. Теперь я хочу скомпилировать этот IR в двоичный файл из моей программы на С++ и вызвать двоичный файл. Также перед вызовом я хочу передать данные из моей программы на С++ в сгенерированный двоичный файл. Я новичок в LLVM и не смог найти никакой документации по этому поводу. Может ли кто-нибудь указать на документацию об этом или сообщить мне, как это можно сделать.
Как вызвать код LLVM из программы на С++ и передать ей данные
Ответы (1)
Вот общие шаги по блокировке и обработке, которые приходят на ум, даже если вы не указали, как вы хотите вызывать сгенерированный код, поэтому я предполагаю, что вы вызываете другой исполняемый файл:
В вашем исполняемом файле
- Сгенерируйте LLVM IR (см. ниже)
- Вызовите с помощью такой функции, как
system
, clang, который сгенерирует новую исполняемую программу из LLVM IR. - Если компиляция прошла успешно, то с помощью функции типа
system
вызовите вновь сгенерированный исполняемый файл и передайте данные в качестве аргументов командной строки.
Сгенерировано LLVM IR
- В IR, который вы создаете, вам нужно будет создать определение функции
main
, которое принимаетargc and argv
, поскольку это будет то, что потребляет переданные данные, которые вы отправляете. - В теле
main
вам нужно будет правильно обрабатывать ввод командной строки и вызывать код, который вы изначально хотели выполнить.
Однако: есть варианты этого. Например, если вы хотите сгенерировать динамическую библиотеку, вы можете пропустить создание функции main
и вместо этого выполнить загрузку динамической библиотеки во время выполнения, которую вы только что создали, и определить точку входа функции.
person
Frank C.
schedule
13.10.2016