Использование printf в LLVM IR
Итак, я писал компилятор для простого лиспа на Rust и генерировал LLVM IR с помощью ящика Inkwell . Пытаясь найти способ вывода значений на стандартный вывод, я натолкнулся на множество ответов на использование функции печати, как в C/C++. Кажется, что по большей части работает без проблем.
Однако в сгенерированном IR отображается только объявление функции, поэтому это, вероятно, означает, что определение где-то связано с самим llvm (в настоящее время используется интерпретатор lli, поскольку это намного проще для тестирования). Во всяком случае, я просто пытался понять, где эта функция определена. Например, есть ли основной модуль в llvm, где он определен? Или используется printf, зависящий от Unix-подобной платформы, вместо того, чтобы быть частью llvm, поскольку большинство функций llvm, похоже, имеют префикс «llvm»?
1 ответ
определен в стандартной библиотеке C (libc).
Поэтому, когда вы компилируете свой llvm IR в объектные файлы, а затем связываете их, вам нужно будет установить ссылку на libc, чтобы иметь возможность использовать
Я считаю, что при использовании вы получаете доступ к любой библиотеке, которая