Как я могу использовать сгенерированный llvm-ar архивный файл? - PullRequest
0 голосов
/ 15 марта 2020

llvm-ar архивирует несколько файлов битовых кодов LLVM в одну архивную библиотеку, которая может быть связана с программой. Операция архивирования работает как положено. Также можно использовать llvm-nm для отображения всех символов в сгенерированном архиве.

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

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

Вопросы:

  1. Есть ли более элегантный или эффективный способ использования сгенерированного заархивированного файла с помощью llvm-ar?

  2. Можно ли использовать битовый код, заархивированный файл напрямую, как показано ниже:

// assumes hello.bc is valid bitcode file and it is built successfully
clang-3.8  -o main main.c hello.bc

// ar hello.bc into lib libhello.bca
llvm-ar-3.8 rcs libhello.bca hello.bc

llvm-nm libhello.bca // has below output

   hello.bc:
   ---------------- T outupt
                    U puts

clang-3.8 -o main main.c libhello.bca // has below error

  libhello.bca: error adding symbols: File format not recognized
  clang: error: linker command failed with exit code 1 (use -v to see invocation)

1 Ответ

0 голосов
/ 18 марта 2020

Инструменты LLVM, такие как llc, lli, opt и другие, не могут напрямую работать с архивами битовых кодов. Вы должны распаковать его перед запуском. Кроме того, вы можете связать элементы архива в один файл битового кода, но это не то же самое, что наличие архива, поэтому зависит, подходит ли вам это.

Что касается clang, вы можете передавать архивы битового кода вместе с исходные файлы и библиотеки, и все будет правильно: распакуйте его, запустите pass, скомпилируйте в объектный файл и создайте ссылку в окончательном двоичном файле.

...