如何在 LLVM中声明stdin
、stout
和(最好是 C 版本)?stderr
我正在尝试在我正在创建的玩具语言中使用一些 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
类似玩具语言编译器之类的函数?