Как вызвать код LLVM из программы на С++ и передать ей данные

У меня есть программа на С++, которая может генерировать LLVM IR во время выполнения. Теперь я хочу скомпилировать этот IR в двоичный файл из моей программы на С++ и вызвать двоичный файл. Также перед вызовом я хочу передать данные из моей программы на С++ в сгенерированный двоичный файл. Я новичок в LLVM и не смог найти никакой документации по этому поводу. Может ли кто-нибудь указать на документацию об этом или сообщить мне, как это можно сделать.


person Johns Paul    schedule 13.10.2016    source источник


Ответы (1)


Вот общие шаги по блокировке и обработке, которые приходят на ум, даже если вы не указали, как вы хотите вызывать сгенерированный код, поэтому я предполагаю, что вы вызываете другой исполняемый файл:

В вашем исполняемом файле

  1. Сгенерируйте LLVM IR (см. ниже)
  2. Вызовите с помощью такой функции, как system, clang, который сгенерирует новую исполняемую программу из LLVM IR.
  3. Если компиляция прошла успешно, то с помощью функции типа system вызовите вновь сгенерированный исполняемый файл и передайте данные в качестве аргументов командной строки.

Сгенерировано LLVM IR

  1. В IR, который вы создаете, вам нужно будет создать определение функции main, которое принимает argc and argv, поскольку это будет то, что потребляет переданные данные, которые вы отправляете.
  2. В теле main вам нужно будет правильно обрабатывать ввод командной строки и вызывать код, который вы изначально хотели выполнить.

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

person Frank C.    schedule 13.10.2016