llvm.orgの clang 3.3 と libc++ を使用してコンパイルしようとしている既存のコードがいくつかあります。別のコマンドの結果を取得する簡単な手順。std::filebuf は FILE* コンストラクターを提供しなくなったようで、コードを置き換えようとしたすべてのアイデアがすべてコマンドを開くことができませんでした。つまり、 fb.is_open() は常に false を返します。
私が見つけたものからfb.open(cppcommand.c_str(), std::ios::in);
、 popen の代わりに何かを使用する必要があります。
コードの重要な部分は次のとおりです。
std::string cppcommand = "/usr/bin/cpp -xc -nostdinc test.c";
FILE *cpppipe = popen (cppcommand.c_str(), "r");
std::filebuf fb (cpppipe);
if (! cpppipe || ! fb.is_open()) {
std::cerr << "Could not run '" << cppcommand.c_str() << "'\n";
return false;
} else {
std::istream in (&fb);
std::ostringstream ss;
ss << in.rdbuf();
result = ss.str();
}
libc ++でこれを実行するにはどうすればよいですか?
コードはOpenShadingLanguageからのもので、ベース インストールから gcc と libstdc++ を削除した後、clang 3.3 と libc++ を含む FreeBSD 10.0 Beta1 でコンパイルしようとしています。
使用されている cppcommand 文字列は、ターミナルに手動で貼り付けた場合、エラーなしで実行されます。