ディスクに書き込むことなくファイルをコンパイルできますか?

ディスクに書き込むことなくファイルをコンパイルできますか?

C/C++ プログラムの一部のコードをコンパイルしたいと思います。仕組みは次のとおりです。 C コードを構成する ASCII テキストを含むバッファー (動的に割り当てられた) をメモリーに持たせます。私のC / C ++では、システムのCコンパイラをfork()呼び出してコードをメモリにコンパイルしました。exec()

gccそれでは、私のコードに直接アクセスする方法(パイプなどを使用するなど)はありますか?または、コードをディスクに書き込んでディスクから読み取る必要があるかどうか疑問に思います。

答え1

これは自分で簡単にテストできます。

echo -e '#include <stdio.h>\nmain() {\nputs("hello, world");\n}' |
    gcc -x c -pipe -

./a.out

答え2

コンパイラのライブラリバージョンを使用してコードをコンパイルします。これはすべての主要なコンパイラについてよく文書化されています。

  • 湾岸協力協議会:libgccjit
  • clang: libclang/Direct 対 llvm/clangDriver
  • TCC(Cのみ):libtcc(なぜなら確かにFabrice Bellardは、最もスペース効率の良いCコンパイラの1つを作成しました。 )

関連情報