संकलित त्रुटि: "g ++: त्रुटि 'cc1plus' को निष्पादित करने की कोशिश कर रहा है: निष्पादन: ऐसी कोई फ़ाइल या निर्देशिका नहीं"


95

जब मैं ... popenमें C / C ++ प्रोग्राम संकलित करता हूं php... मुझे यह त्रुटि मिली:

g++: error trying to exec 'cc1plus': execvp: No such file or directory

लेकिन अगर मैं खोल में php कोड चलाता हूँ .. यह ठीक काम करता है ..

आर्क लिनक्स में ..

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;
?>

धन्यवाद


2
क्या आपने env वेरिएबल्स को प्रिंट करने और उनकी तुलना करने की कोशिश की है? क्या आपके पास सुरक्षित मोड चालू या बंद है?
व्य्कटर

हाँ .. मैं php और खोल के बीच env चर की तुलना ... लेकिन यह किसी भी मदद नहीं है ... और मेरे सुरक्षित मोड से दूर है ..
Zeyi Fan

क्या आप एक ही उपयोगकर्ता का उपयोग कर रहे हैं या वेब सर्वर से स्क्रिप्ट निष्पादित कर रहे हैं? "-V" जोड़ें (क्रिया आउटपुट होना चाहिए), शायद एक उत्तर होगा।
व्य्कटर

ठीक है .. मैं सिर्फ C ++ कोड संकलित करने और उपयोगकर्ता के php xx.phpरूप में चलाने के लिए परीक्षण किया गया http। उन सभी को सफलता है ... और के उत्पादन में g++ -vphp कोड में अपनी खोल में साथ इसी तरह की है ..
Zeyi फैन

1
gcc -print-search-dirsइस बारे में कैसा है? क्या आउटपुट समान हैं ?
व्य्कटोर

जवाबों:


120

आपको gcc-c++पैकेज स्थापित करने की आवश्यकता है ।

yum install gcc-c++

27
अल्पाइन के लिए, यह थाapk add g++
shadi

45

मुझे पता नहीं क्यों, लेकिन मैंने अपने स्रोत फ़ाइल COLARR.C का नाम बदलकर colarr.c रखा और त्रुटि गायब हो गई! शायद आपको इसकी जरूरत है

sudo apt-get install g++

2
ध्यान दें कि ऊपरी-मामले का .Cविस्तार C ++ स्रोत के लिए कई सम्मेलनों में से एक है - .cppऔर .ccदो अन्य हैं। अपर-केस .Cकन्वेंशन केस-असंवेदनशील फ़ाइल सिस्टम (उदाहरण के लिए विंडोज, मैकओएस) के साथ बुरी तरह से इंटरैक्ट करता है। जब आपके पास था COLARR.C, तो सिस्टम संभवतः इसे C ++ स्रोत फ़ाइल के रूप में देख रहा था; के रूप में colarr.c, यह एक सी स्रोत फ़ाइल है।
जोनाथन लेफ्लर

23

यह समस्या हो सकती है यदि g ++ और gcc के अलग-अलग संस्करण स्थापित हैं।

   g++ --version
   gcc --version

यदि ये परिणाम नहीं देते हैं, तो संभवतः आपके पास जीसीसी के कई संस्करण हैं। आप का उपयोग करके जाँच कर सकते हैं:

    dpkg -l | grep gcc | awk '{print $2}'

आमतौर पर, / usr / bin / gcc को / etc / विकल्प / gcc से जोड़ा जाएगा, जिसे फिर से / -rr/bin/gcc-4.6 या /usr/bin/gcc-4.8 कहने के लिए सहानुभूति-पूर्वक जोड़ा जाएगा (मामले में) gcc-4.6, gcc-4.8 स्थापित।)

इस लिंक को बदलकर आप उसी संस्करण में gcc और g ++ रन बना सकते हैं और इससे आपकी समस्या हल हो सकती है!


यह समस्या को हल नहीं करता है, मुझे इन लिंक को बदलने का कोई तरीका नहीं मिला।
ब्रांता

यह काम किया, और त्रुटि चली जाती है जब मैं सॉफ्टलिंक / / / विकल्प / gcc / usr / bin / gcc72 से / usr / bin / gcc48 को ln -fs / usr / bin / gcc48 / etc / विकल्प / gcc से संशोधित करता हूं ।
buxizhizhoum

7

प्रत्येक कंपाइलर का अपना लिबास / डायरेक्टरी होता है। आम तौर पर libexec निर्देशिका में अन्य कार्यक्रमों द्वारा बुलाए जाने वाले छोटे सहायक कार्यक्रम होते हैं। इस मामले में, gcc अपने स्वयं के 'cc1' संकलक की तलाश में है। आपकी मशीन में gcc के विभिन्न संस्करण हो सकते हैं, और प्रत्येक संस्करण का अपना 'cc1' होना चाहिए। आम तौर पर इन संकलक पर स्थित हैं:


/usr/local/libexec/gcc/<architecture>/<compiler>/<compiler_version>/cc1

G ++ के लिए समान पथ। उपरोक्त त्रुटि का मतलब है, कि वर्तमान gcc संस्करण का उपयोग अपने स्वयं के 'cc1' संकलक को खोजने में सक्षम नहीं है। यह आम तौर पर एक पथ मुद्दे की ओर इशारा करता है।


मैं अपने पैठ पर्यावरण के साथ एक ही मुद्दा था जब मैं भाग गया strace g++ [args]मुझे पता चला कि यह मार्ग में गलत फ़ोल्डर की कोशिश कर रहा था तब हार मान रहा था।
सिरब्रिअलांस

2

जब मैंने 'अजगर' के साथ बातचीत की, तब भी यही मुद्दा था; मुख्य कारण यह है कि खोज पथ सापेक्ष है, यदि आप के g++रूप में कॉल नहीं करते हैं, तो यह कॉल /usr/bin/g++करने के लिए विहित पथों को काम करने में सक्षम नहीं होगा cc1plus


0

मेरे पास gcc "gnat1" के साथ एक ही मुद्दा था और यह पथ गलत होने के कारण था। Gnat1 संस्करण 4.6 पर था, लेकिन मैं संस्करण 4.8.1 निष्पादित कर रहा था, जिसे मैंने स्थापित किया था। एक अस्थायी समाधान के रूप में, मैंने gnat1 को 4.6 से कॉपी किया और 4.8.1 फ़ोल्डर के तहत चिपकाया।

मेरे कंप्यूटर पर gcc का रास्ता है / usr / lib / gcc / i686-linux-gnu /

आप खोज आदेश का उपयोग करके पथ पा सकते हैं:

find /usr -name "gnat1"

आपके मामले में आप cc1plus की तलाश करेंगे:

find /usr -name "cc1plus"

बेशक, यह एक त्वरित समाधान है और एक अधिक ठोस जवाब टूटी हुई राह को ठीक करेगा।



0

आपकी GCC स्थापना में कुछ गड़बड़ हो गई । इसे इस तरह से पुन: स्थापित करने का प्रयास करें:

sudo apt-get install --reinstall g++-5

उबंटू में g++एक निर्भरता पैकेज है जो के डिफ़ॉल्ट संस्करण को स्थापित करता हैg++ आपके ओएस संस्करण लिए । तो बस फिर से पैकेज को हटाने और स्थापित करने से काम नहीं चलेगा, क्योंकि यह डिफ़ॉल्ट संस्करण स्थापित करेगा। इसलिए आपको पुन: स्थापित करने की आवश्यकता है।

नोट: आप g++-5अपने इच्छित g++संस्करण से बदल सकते हैं । अपने वर्तमान g++संस्करण को खोजने के लिए इसे चलाएं:

g++ --version

0

आपके पास यह समस्या हो सकती है यदि आपके पास गलत स्थान पर इंगित करने वाला पर्यावरण चर GCC_ROOT है। संभवतः सबसे सरल फिक्स (सिस्टम की तरह * निक्स पर) हो सकता है:

unset GCC_ROOT

अधिक जटिल मामलों में आपको इसे उचित स्थान पर रिपीट करना पड़ सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.