我有一些現有的代碼,我嘗試使用clang 3.3和libC++從llvm.org進行編譯。一個簡單的步驟來檢索另一個命令的結果。看來,std :: filebuf不再提供FILE *構造函數,並且我試圖替換代碼的所有想法都未能打開該命令,即fb.is_open()始終返回false。將std :: filebuf(FILE *)轉換爲使用libC++
從我能找到的,我將不得不使用像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,我試圖讓它在FreeBSD 10.0 Beta1下編譯,其中包含在從基本安裝中刪除gcc和libstdC++之後的clang 3.3和libC++。
如果手動粘貼到終端中,正在使用的cppcommand字符串將無誤地運行。