stdin
LLVMで、、、stout
およびstderr
(できれば C バージョン) をどのように宣言しますか? 私が作成しているおもちゃの言語でいくつかの stdio 関数を使用しようとしています。そのような関数の 1 つが次のfgets
とおりです。
char * fgets ( char * str, int num, FILE * stream );
それを使用するには、 が必要でしstdin
た。そこで、見つけた FILE の定義を生成する LLVM API コードを書き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
どうやら、私が書いたものはうまくいかなかったようです。だから私の質問は、おもちゃの言語コンパイラのような関数のstdin
、stout
、およびを宣言するために、LLVM API に何を書かなければならないかということです。stderr
fgets