LLVM stdin/stdout/stderr

Как объявить stdin, stoutи stderr(предпочтительно версии C) в LLVM? Я пытаюсь использовать некоторые функции stdio в игрушечном языке, который я создаю. Одной из таких функций была fgets:

char * fgets ( char * str, int num, FILE * stream );

Чтобы использовать это, мне нужно было stdin. Итак Я написал некоторый код LLVM API для генерации определения FILE, которое я нашел, и объявил stdinвнешним глобальным кодом, код сгенерировал это:

%file = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %marker*, %file*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
%marker = type { %marker*, %file*, i32 }

@stdin = external global %file*

Однако, когда я запустил получившийся модуль, он дал мне это ошибка:

Undefined symbols for architecture x86_64:
"_stdin", referenced from:
    _main in cc9A5m3z.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

Судя по всему, то, что я написал, не сработало, поэтому мой вопрос в том, что мне нужно написать в LLVM API, чтобы объявить stdin, stoutи stderrдля таких функций, как fgetsв чем-то вроде компилятора игрушечного языка?

11
задан tophat 3 June 2012 в 15:04
поделиться