configure: error: O compilador C não pode criar executáveis

15

Eu estava tentando instalar o rvm usando \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles. Funcionou bem até eu receber um erro de configuração:

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.

A seguir, o conteúdo do arquivo de log mencionado:

[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

Tentei um programa C "olá mundo" e obtive o seguinte erro na compilação:

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

Não sei por que esse erro foi gerado. Não encontrei uma resposta satisfatória para isso no fórum. Alguém por favor poderia ajudar. obrigado

naka
fonte
1
Eu recebi esse erro quando especifiquei CXXFLAGS for CPPFLAGS por engano ao executar o script './configure'. Portanto, a mensagem de erro não explica o erro exato.
RajaRaviVarma

Respostas:

12

Parece que você possui uma versão não padrão do vinculador GNU ldem seu /usr/local/bindiretório (possivelmente instalado a partir da fonte), e sua variável de ambiente PATH é configurada de forma que o sistema encontre essa versão antes da versão 'system' (que deve estar em /usr/bin/ld) . Se você deseja construir usando as versões padrão do sistema das ferramentas de construção , será necessário ajustar sua variável de ambiente PATH para que ela procure /usr/binantecipadamente/usr/local/bin

Se você deseja corrigir permanentemente sua variável PATH, precisará descobrir onde a definiu originalmente - provavelmente no seu arquivo ~ / .bashrc, mas outros locais são possíveis. Como alternativa, se você precisar apenas de uma correção temporária para essa compilação, tente

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

no terminal antes de executar o ./configure

No entanto, às vezes há boas razões pelas quais você (ou o administrador do sistema) pode querer usar versões de ferramentas /usr/local- nesse caso, será necessário descobrir por que o ldaparentemente não é compatível com o restante da cadeia de construção e corrigir it - se este for um sistema comercial ou escolar, entre em contato com o administrador do sistema ou o departamento de TI.

chave de aço
fonte
9
Normalmente /usr/local/binestá à frente /usr/binno PATHpor uma boa razão: não há nenhum ponto em ter um programa instalado localmente se a versão da distribuição tem precedência. Bom trabalho para detectar o problema, mas a resolução recomendada não é alterar o CAMINHO, mas remover ou corrigir o problema /usr/local/bin/ld.
Gilles 'SO- stop be evil' '
@steeldriver: Se não estiver em ~ / .bashrc, eu poderia simplesmente copiar e colar a linha "export PATH =" / usr / bin: $ PATH "" lá. Ou isso criaria um problema para outros programas?
naka 19/09/13
@Gilles Eu editei minha resposta para refletir seu comentário @naka Aconselho contra isso, isso causará mais confusão a longo prazo - você deve tomar nota do comentário de Gilles e descobrir por que seu administrador configurou o PATH para usar o versão em/usr/local
steeldriver 19/09/13
3
Eu recebi o mesmo erro… isso não funcionou para mim… which ldapenas retornos /usr/bin/ld….
Isomorphismes
9

Ao contrário das complicadas razões dadas acima, no meu caso, era simplesmente um caso de não ter g++instalado. Estranhamente, a mensagem de erro era a mesma descrita pelo OP, ou seja,

configure: error: C compiler cannot create executables

De qualquer forma, resolvi isso instalando o g ++:

sudo apt-get install g++
rahul1210
fonte
0

Tente atualizar o sistema, reinstale os pacotes que fornecem ld e o compilador ( gcc ). Corra prelink -au && depmod -a. Então reinicie.

Pode ser necessário desativar ou reconfigurar a pré-ligação /etc/systemctlou onde quer que suas distros o configurem.

user599717
fonte