configure: error: компилятор C не может создать исполняемые файлы

15

Я пытался установить RVM с помощью \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles. Он работал нормально, пока я не получил ошибку конфигурации:

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.

Ниже приведено содержимое упомянутого файла журнала:

[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

Затем я попробовал программу на C "hello world" и получил следующую ошибку при компиляции:

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

Я не уверен, почему эта ошибка выдается. Я не смог найти удовлетворительного ответа на этот вопрос на форуме. Может кто-нибудь, пожалуйста, помогите. Благодарность

Нака
источник
1
Я получил эту ошибку, когда ошибочно указал CXXFLAGS для CPPFLAGS при запуске сценария ./configure. Таким образом, сообщение об ошибке не объясняет точную ошибку.
RajaRaviVarma

Ответы:

12

Похоже, что у вас есть нестандартная версия компоновщика GNU ldв вашем /usr/local/binкаталоге (возможно, установленная из исходного кода), и ваша переменная среды PATH установлена ​​так, что система находит эту версию перед «системной» версией (которая должна быть в /usr/bin/ld) , Если вы хотите выполнить сборку с использованием стандартных системных версий инструментов сборки , вам необходимо настроить переменную среды PATH так, чтобы она выполняла поиск /usr/binраньше/usr/local/bin

Если вы хотите навсегда исправить вашу переменную PATH, вам необходимо выяснить, где вы ее изначально установили - возможно, в файле ~ / .bashrc, но возможны и другие местоположения. В качестве альтернативы, если вам просто нужно временное исправление для этой сборки, вы можете попробовать

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

в терминале перед выполнением ./configure

Однако иногда есть веские причины, по которым вы (или ваш системный администратор) хотите, чтобы вы использовали версии инструментов из /usr/local- если это так, то вам нужно будет выяснить, почему ldони явно не совместимы с остальной цепочкой сборки, и исправить это. это - если это система работы или учебы, обратитесь к системному администратору или в отдел ИТ.

steeldriver
источник
9
Обычно /usr/local/binвпереди /usr/binв PATHпо уважительной причине: нет смысла в установке программы на местном уровне , если версия от распределения имеет приоритет. Хорошая работа по выявлению проблемы, но рекомендуемое решение состоит не в том, чтобы изменить PATH, а в том, чтобы либо удалить, либо исправить неисправный /usr/local/bin/ld.
Жиль "ТАК - перестань быть злым"
@steeldriver: Если его нет в ~ / .bashrc, я могу просто скопировать и вставить туда строку "export PATH =" / usr / bin: $ PATH "". Или это создаст проблему для других программ?
Нака
@ Жиль Я отредактировал свой ответ, чтобы отразить ваш комментарий @naka Я советую против этого, в долгосрочной перспективе это вызовет еще большую путаницу - вы должны принять к сведению комментарий Жиля и выяснить, почему ваш администратор настроил PATH для использования версия в/usr/local
Steeldriver
3
Я получил ту же ошибку ... это не сработало для меня ... which ldтолько возвращается /usr/bin/ld...
изоморфизм
9

Вопреки сложным причинам, приведенным выше, в моем случае это был просто случай не g++установить. Как ни странно, сообщение об ошибке было таким же, как описано ОП, т.е.

configure: error: C compiler cannot create executables

В любом случае, я решил это, установив g ++:

sudo apt-get install g++
rahul1210
источник
0

Попробуйте обновить систему, переустановите пакеты, предоставляющие ld и компилятор ( gcc ). Беги prelink -au && depmod -a. Затем перезагрузите компьютер.

Возможно, вам придется отключить или перенастроить предварительную ссылку /etc/systemctlили там, где это установлено в ваших дистрибутивах.

user599717
источник