Jak można zadeklarować stdin
, i (najlepiej wersje C) w LLVM? Próbuję użyć niektórych funkcji stdio w języku zabawki, który tworzę. Jedną z takich funkcji był fgets
:LLVM stdin/stdout/stderr
char * fgets (char * str, int num, FILE * stream);
W celu wykorzystania że muszę stdin
. Napisałem więc kod LLVM API, aby wygenerować definicję PLIKU, który znalazłem i zadeklarowałem stdin
zewnętrzny globalny. Kod generowany w ten sposób:
%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*
Jednak, gdy wpadłem wynikowy moduł, to dał mi ten błąd:
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
Widocznie, co napisałem nie działa. Tak więc moje pytanie brzmi: co mam napisać w interfejsie API LLVM, aby zadeklarować stdin
, stout
i stderr
dla funkcji takich jak fgets
w coś podobnego do kompilatora języka zabawek?
Możesz napisać funkcje pomocnicze w C, które zwrócą stdin/stdout/stderr i łączą je z twoim programem. –
Spróbuję tego, chociaż wolałbym po prostu użyć tego, co daje nam LLVM API, jeśli mogę. – tophat