সংকলন ত্রুটি: "g ++: 'cc1plus' চালানোর চেষ্টা করার সময় ত্রুটি: execvp: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই"


99

যখন আমি সঙ্গে সি / সি ++ প্রোগ্রাম কম্পাইল popenমধ্যে php... আমি এই ত্রুটিটি পেয়েছিলেন:

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

তবে আমি যদি শেল পিএইচপি কোড চালাই .. এটি ঠিক কাজ করে ..

আর্চ লিনাক্সে ..

পিএইচপি কোড:

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

ধন্যবাদ


4
আপনি env ভেরিয়েবলগুলি মুদ্রণ এবং তাদের তুলনা করার চেষ্টা করেছেন? আপনার কি নিরাপদ মোড চালু আছে বা বন্ধ আছে?
ভিক্টর

হ্যাঁ .. আমি পিএইচপি এবং শেলের মধ্যে এনভেরি ভেরিয়েবলগুলি তুলনা করেছি ... তবে এটির কোনও সহায়তা নেই ... এবং আমার নিরাপদ মোড বন্ধ আছে ..
জায়েই ফ্যান

আপনি কি একই ব্যবহারকারীর ব্যবহার করছেন বা ওয়েব সার্ভার থেকে স্ক্রিপ্ট চালাচ্ছেন? "-V" যুক্ত করুন (ভার্বোজ আউটপুট হওয়া উচিত), সম্ভবত কোনও উত্তর আসবে।
ভিক্টর

ঠিক আছে .. আমি শুধু সি ++ কোড কম্পাইল পরীক্ষা এবং চালানোর php xx.phpযেমন httpব্যবহারকারী। g++ -v
এগুলির সবই

4
gcc -print-search-dirsএ কেমন? আউটপুটগুলি কি একই রকম ?
ভিক্টর

উত্তর:



50

কেন জানি না তবে আমি কেবলমাত্র আমার উত্স ফাইলটির নামকরণ করেছি COLARR.C এবং colarr.c এ রেখেছি এবং ত্রুটিটি নিখোঁজ হয়েছে! সম্ভবত আপনার এটি দরকার

sudo apt-get install g++

4
নোট করুন যে আপার-কেস .Cএক্সটেনশনটি সি ++ উত্সের জন্য প্রচুর কনভেনশনগুলির মধ্যে একটি - .cppএবং .ccঅন্য দু'টি। আপার-কেস .Cকনভেনশন কেস-সংবেদনশীল ফাইল সিস্টেমগুলির সাথে খারাপভাবে যোগাযোগ করে (উদাহরণস্বরূপ উইন্ডোজ, ম্যাকোস) OS আপনার যখন ছিল তখন COLARR.Cসিস্টেমটি সম্ভবত এটি সি ++ উত্স ফাইল হিসাবে দেখছিল; হিসাবে colarr.cএটি একটি সি উত্স ফাইল।
জোনাথন লেফলার

23

এই সমস্যাটি ঘটতে পারে যদি জি ++ এবং জিসিসি-র বিভিন্ন সংস্করণ ইনস্টল করা থাকে।

   g++ --version
   gcc --version

যদি এগুলি ফলাফল না দেয়, আপনার সম্ভবত সম্ভবত জিসিসির একাধিক সংস্করণ ইনস্টল করা আছে। আপনি ব্যবহার করে পরীক্ষা করতে পারেন:

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

সাধারণত, / ইউএসআর / বিন / জিসিসি / etc / বিকল্প / জিসিসি-র সাথে সিএম-লিঙ্কযুক্ত যা আবার /usr/bin/gcc-4.6 বা /usr/bin/gcc-4.8 বলতে সিম-সংযুক্ত হবে gcc-4.6, gcc-4.8 ইনস্টল করা আছে।)

এই লিঙ্কটি পরিবর্তন করে আপনি একই সংস্করণে gcc এবং g ++ রান করতে পারেন এবং এটি আপনার সমস্যার সমাধান করতে পারে!


এটি সমস্যার সমাধান করে না, আমি এই লিঙ্কগুলি পরিবর্তন করার কোনও উপায় খুঁজে পেলাম না।
বানা

এটি কাজ করে এবং ত্রুটিটি চলে যায় যখন আমি / usr / bin / gcc72 থেকে / usr / bin / gcc72 থেকে ln -fs / usr / bin / gcc48 / etc / বিকল্প / gcc এর সফটলিঙ্কটি পরিবর্তন করেছি ।
বুকশিঝৌম

7

প্রতিটি সংকলকের নিজস্ব লিবেক্সেক / ডিরেক্টরি থাকে। সাধারণত লিবেক্সেক ডিরেক্টরিতে অন্যান্য প্রোগ্রাম দ্বারা কল করা ছোট সহায়ক প্রোগ্রাম থাকে। এই ক্ষেত্রে, gcc তার নিজস্ব 'সিসি 1' সংকলক সন্ধান করছে। আপনার মেশিনে জিসিসির বিভিন্ন সংস্করণ থাকতে পারে এবং প্রতিটি সংস্করণটির নিজস্ব 'সিসি 1' থাকা উচিত। সাধারণত এই সংকলকগুলি এখানে অবস্থিত:


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

জি ++ এর জন্য অনুরূপ পাথ। ত্রুটির উপরের অর্থ, বর্তমান ব্যবহৃত জিসিসি সংস্করণটি তার নিজস্ব 'সিসি 1' সংকলকটি সন্ধান করতে সক্ষম নয়। এটি সাধারণত একটি PATH ইস্যুতে নির্দেশ করে।


আমার প্যাথ পরিবেশের সাথে আমার একই সমস্যা ছিল যখন আমি দৌড়াতে গিয়ে strace g++ [args]আবিষ্কার করি এটি ছেড়ে দেওয়ার পথে ভুল ফোল্ডারটি চেষ্টা করছে trying
sirbrialliance

2

'অজগর' দিয়ে দাঁড়ানোর সময় আমার একই সমস্যা ছিল; মূল কারণটি হ'ল অনুসন্ধানের পথটি আপেক্ষিক, যদি আপনি কল না g++করেন /usr/bin/g++, তবে কল করার জন্য এটি প্রচলিত পথগুলিতে কাজ করতে সক্ষম হবে না cc1plus


0

আমারও একই সমস্যা ছিল জিসিসি "gnat1" এর সাথে এবং এটি পথটি ভুল হওয়ার কারণে হয়েছিল। Gnat1 সংস্করণ 4.6 এ ছিল তবে আমি ইনস্টল করা সংস্করণ 4.8.1 চালাচ্ছি। একটি অস্থায়ী সমাধান হিসাবে, আমি 4.6 থেকে gnat1 অনুলিপি করেছি এবং 4.8.1 ফোল্ডারের নীচে আটকানো হয়েছে।

আমার কম্পিউটারে জিসিসি-র পাথ হ'ল / ইউএসআর / লিব / জিসিসি / আই 6866-লিনাক্স-গনু /

ফাইন্ড কমান্ডটি ব্যবহার করে আপনি পাথটি সন্ধান করতে পারেন:

find /usr -name "gnat1"

আপনার ক্ষেত্রে আপনি সিসি 1 প্লাস খুঁজছেন:

find /usr -name "cc1plus"

অবশ্যই এটি একটি দ্রুত সমাধান এবং আরও দৃ solid় উত্তর হ'ল ভাঙা পথটি স্থির করা হবে।



0

আপনার জিসিসি ইনস্টলেশনতে কিছু ভুল হয়েছে । এটিকে আবার ইনস্টল করার চেষ্টা করুন:

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

উবুন্টুতে g++হ'ল নির্ভরতা প্যাকেজ যা g++আপনার ওএস সংস্করণের ডিফল্ট সংস্করণ ইনস্টল করে । সুতরাং কেবল প্যাকেজটি সরানো ও ইনস্টল করা আবার কাজ করবে না, কারণ এটি ডিফল্ট সংস্করণ ইনস্টল করবে। এজন্য আপনাকে পুনরায় ইনস্টল করতে হবে।

দ্রষ্টব্য: আপনি g++-5আপনার পছন্দসই g++সংস্করণটি প্রতিস্থাপন করতে পারেন । আপনার বর্তমান g++সংস্করণটি এটি চালনার সন্ধান করতে:

g++ --version

0

আপনার যদি এই সমস্যাটি থাকতে পারে তবে আপনার যদি পরিবেশের পরিবর্তনশীল GCC_ROOT কোনও ভুল অবস্থানের দিকে ইঙ্গিত করে। সম্ভবত সবচেয়ে সহজ সমাধান (সিস্টেমের মতো * নিক্সে) হতে পারে:

unset GCC_ROOT

আরও জটিল ক্ষেত্রে আপনার এটি যথাযথ জায়গায় পুনর্নির্মাণের প্রয়োজন হতে পারে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.