Ketika saya mengkompilasi program C / C ++ dengan popen
di php
... saya mendapat kesalahan ini:
g++: error trying to exec 'cc1plus': execvp: No such file or directory
tetapi jika saya menjalankan kode php di shell .. berfungsi dengan baik ..
di Arch Linux ..
Kode PHP:
<?php
function rfile($fp) {
$out="";
while (!feof($fp)) {
$out.= fgets($fp, 1024000);
}
return $out;
}
$p = popen('g++ -Wall -g aplusb.cc -o aplusb 2>&1', 'r');
$result = rfile($p);
pclose($p);
echo $result;
?>
Terima kasih
php xx.php
sebagaihttp
pengguna. semuanya sukses ... dan keluarang++ -v
dalam kode php serupa dengan di shell ..gcc -print-search-dirs
bagaimana dengan ini? Apakah hasilnya sama ?Jawaban:
Anda perlu menginstal
gcc-c++
paket.sumber
apk add g++
Saya tidak tahu mengapa tetapi saya baru saja mengganti nama file sumber saya COLARR.C menjadi colarr.c dan kesalahan itu lenyap! mungkin Anda membutuhkan ini
sumber
.C
ekstensi huruf besar adalah salah satu dari sejumlah konvensi untuk sumber C ++ -.cpp
dan.cc
dua lainnya..C
Konvensi huruf besar berinteraksi buruk dengan sistem file tidak peka huruf besar / kecil (Windows, macOS, misalnya). Jika Anda memilikinyaCOLARR.C
, sistem mungkin melihatnya sebagai file sumber C ++; sebagaicolarr.c
, ini adalah file sumber C.Masalah ini dapat terjadi jika versi g ++ dan gcc yang berbeda diinstal.
Jika ini tidak memberikan hasil, Anda mungkin telah menginstal beberapa versi gcc. Anda dapat memeriksa dengan menggunakan:
Biasanya, / usr / bin / gcc akan dihubungkan dengan sym ke / etc / alternate / gcc yang juga ditautkan dengan sym ke mengatakan /usr/bin/gcc-4.6 atau /usr/bin/gcc-4.8 (Jika Anda memiliki gcc-4.6, gcc-4.8 diinstal.)
Dengan mengubah tautan ini, Anda dapat menjalankan gcc dan g ++ dalam versi yang sama dan ini dapat menyelesaikan masalah Anda!
sumber
Setiap kompilator memiliki direktori libexec / sendiri-sendiri. Biasanya direktori libexec berisi program pembantu kecil yang dipanggil oleh program lain. Dalam kasus ini, gcc mencari kompiler 'cc1' miliknya sendiri. Mesin Anda mungkin berisi versi gcc yang berbeda, dan setiap versi harus memiliki 'cc1' sendiri. Biasanya kompiler ini berada di:
Jalur serupa untuk g ++. Kesalahan di atas berarti, versi gcc saat ini yang digunakan tidak dapat menemukan kompiler 'cc1' sendiri. Ini biasanya mengacu pada masalah PATH.
sumber
strace g++ [args]
saya menemukan itu mencoba folder yang salah di jalur kemudian menyerah.Saya memiliki masalah yang sama saat melakukan forking dengan 'python'; alasan utamanya adalah bahwa jalur pencarian bersifat relatif, jika Anda tidak memanggilnya
g++
sebagai/usr/bin/g++
, jalur tersebut tidak akan dapat menentukan jalur kanonik untuk dipanggilcc1plus
.sumber
Saya memiliki masalah yang sama dengan gcc "gnat1" dan itu karena jalur yang salah. Gnat1 menggunakan versi 4.6 tetapi saya menjalankan versi 4.8.1, yang telah saya instal. Sebagai solusi sementara, saya menyalin gnat1 dari 4.6 dan menempelkannya di bawah folder 4.8.1.
Jalur ke gcc di komputer saya adalah / usr / lib / gcc / i686-linux-gnu /
Anda dapat menemukan jalur dengan menggunakan perintah find:
Dalam kasus Anda, Anda akan mencari cc1plus:
Tentu saja, ini adalah solusi cepat dan jawaban yang lebih solid adalah memperbaiki jalur yang rusak.
sumber
Instal g ++ saat menjalankan openSuSE
sumber
Ada yang salah dengan Anda penginstalan GCC . Coba instal ulang seperti ini:
Di Ubuntu,
g++
adalah paket ketergantungan yang menginstal versi defaultg++
untuk versi OS Anda. Jadi hanya menghapus dan menginstal paket lagi tidak akan berfungsi, karena itu akan menginstal versi default. Itulah mengapa Anda perlu menginstal ulang.Catatan: Anda dapat mengganti
g++-5
dengang++
versi yang Anda inginkan . Untuk menemukang++
versi Anda saat ini, jalankan ini:sumber
Anda mungkin mengalami masalah ini juga jika Anda memiliki variabel lingkungan GCC_ROOT yang mengarah ke lokasi yang salah. Mungkin perbaikan yang paling sederhana adalah (pada * nix like system):
dalam kasus yang lebih rumit, Anda mungkin perlu mengarahkannya kembali ke lokasi yang tepat
sumber