Ubuntu – configure: error: C compiler cannot create executables


I was trying to install rvm using \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles. It worked fine until I got a configure error:

Error running './configure --prefix=/home/nishant/.rvm/rubies/ruby-2.0.0-p247 --disable-install-doc --enable-shared',
please read /home/nishant/.rvm/log/1379591052_ruby-2.0.0-p247/configure.log
There has been an error while running configure. Halting the installation.

Following are the contents of the mentioned log file:

[2013-09-19 17:15:58] ./configure
current path: /home/nishant/.rvm/src/ruby-2.0.0-p247
command(4): ./configure --prefix=/home/nishant/.rvm/rubies/ruby-2.0.0-p247 --disable-install-doc --enable-shared
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/home/nishant/.rvm/src/ruby-2.0.0-p247':
configure: error: C compiler cannot create executables
See `config.log' for more details

I then tried a "hello world" C program and got the following error on compilation:

nishant@nishant-Inspiron-1545:~$ gcc -g -o hello hello.c 
/usr/local/bin/ld: this linker was not configured to use sysroots
collect2: error: ld returned 1 exit status

I'm not sure why this error is thrown. I couldn't find a satisfactory answer to this on the forum. Could someone please help.

Best Answer

It looks like you have a non-standard version of the GNU linker ld in your /usr/local/bin directory (possibly installed from source), and your PATH environment variable is set such that the system finds that version before the 'system' version (which should be at /usr/bin/ld). If you want to build using the standard system versions of the build tools, you will need to adjust your PATH environment variable so that it searches /usr/bin ahead of /usr/local/bin

If you want to permanently fix your PATH variable, you will need to find out where you set it originally - probably in your ~/.bashrc file, but other locations are possible. Alternatively, if you just need a temporary fix for this build, you could try

export PATH="/usr/bin:$PATH"

in the terminal before executing the ./configure

However there are sometimes good reasons why you (or your system admin) may want you to use versions of tools from /usr/local - if so, then you will need to find out why the ld there is apparently not compatible with the rest of the build chain and fix it - if this is a work or school system then contact your system administrator or IT department.

Related Question