Zeyi Fan
Zeyi Fan

Reputation: 2373

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

When I compile C/C++ program with popen in php... I got this error:

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

but if I run php code in shell.. it works fine..

in Arch Linux..

PHP Code:

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

thanks

Upvotes: 162

Views: 261854

Answers (11)

tsveti_iko
tsveti_iko

Reputation: 7972

Something went wrong with your GCC installation. Try reinstalling the it like this:

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

In Ubuntu the g++ is a dependency package that installs the default version of g++ for your OS version. So simply removing and installing the package again won't work, cause it will install the default version. That's why you need to reinstall.

Note: You can replace the g++-5 with your desired g++ version. To find your current g++ version run this:

g++ --version

Addition:

The GCC and G++ versions should match. You can check the default versions like this:

gcc --version
g++ --version

If the versions don't match, install the latest versions that match with (replace 12 with the desired version):

sudo apt-get install --reinstall gcc-12
sudo apt-get install --reinstall g++-12

After the installation is done, check the default versions again with the commands above. If the versions of GCC and G++ still don't match, check all available/installed versions with:

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

If there are multiple versions for each package, create a list of compiler alternatives like this:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 12

Then check the available compilers with the commands below. Each one will show a list with options - choose the default version by typing the selection number:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

And you're done! Now check the default versions again - they should match!

Source: linuxconfig.org

Upvotes: 3

Yuv
Yuv

Reputation: 71

Some of these answers are amazing but didn't work on my Ubuntu VM for some reason. Adding /usr/lib/gcc/x86_64-linux-gnu/11 (in my case 11) to my path worked in my case.

Upvotes: 0

Myotha
Myotha

Reputation: 66

For apk, easiest way is:

apk add build-base

Upvotes: 4

Slava
Slava

Reputation: 44248

You may have this issue as well if you have environment variable GCC_ROOT pointing to a wrong location. Probably simplest fix could be (on *nix like system):

unset GCC_ROOT

in more complicated cases you may need to repoint it to proper location

Upvotes: 1

David Hamner
David Hamner

Reputation: 701

Install g++ on openSuSE run

zypper in gcc-c++

Upvotes: 3

vliu
vliu

Reputation: 21

I had the same issue when forking with 'python'; the main reason is that the search path is relative, if you don't call g++ as /usr/bin/g++, it will not be able to work out the canonical paths to call cc1plus.

Upvotes: 2

pulkitag
pulkitag

Reputation: 665

This problem can happen if different versions of g++ and gcc are installed.

   g++ --version
   gcc --version

If these don't give the result, you probably have multiple versions of gcc installed. You can check by using:

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

Usually, /usr/bin/gcc will be sym-linked to /etc/alternatives/gcc which is again sym-linked to say /usr/bin/gcc-4.6 or /usr/bin/gcc-4.8 (In case you have gcc-4.6, gcc-4.8 installed.)

By changing this link you can make gcc and g++ run in the same version and this may resolve your issue!

Upvotes: 41

Sunil Kumar
Sunil Kumar

Reputation: 6630

I don't know why but i just renamed my source file COLARR.C to colarr.c and the error vanished! probably you need this

sudo apt-get install g++

Upvotes: 99

hahakubile
hahakubile

Reputation: 7552

You need to install gcc-c++ package.

yum install gcc-c++

Upvotes: 206

ren.rocks
ren.rocks

Reputation: 792

I had the same issue with gcc "gnat1" and it was due to the path being wrong. Gnat1 was on version 4.6 but I was executing version 4.8.1, which I had installed. As a temporary solution, I copied gnat1 from 4.6 and pasted under the 4.8.1 folder.

The path to gcc on my computer is /usr/lib/gcc/i686-linux-gnu/

You can find the path by using the find command:

find /usr -name "gnat1"

In your case you would look for cc1plus:

find /usr -name "cc1plus"

Of course, this is a quick solution and a more solid answer would be fixing the broken path.

Upvotes: 0

Freddy
Freddy

Reputation: 3274

Each compiler has its own libexec/ directory. Normally libexec directory contains small helper programs called by other programs. In this case, gcc is looking for its own 'cc1' compiler. Your machine may contains different versions of gcc, and each version should have its own 'cc1'. Normally these compilers are located on:


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

Similar path for g++. Above error means, that the current gcc version used is not able to find its own 'cc1' compiler. This normally points to a PATH issue.

Upvotes: 10

Related Questions