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 і отримав таку помилку під час компіляції:

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

Схоже, у вас ldу вашому /usr/local/binкаталозі є нестандартна версія посилання GNU (можливо, встановлена ​​з джерела), і ваша змінна середовища PATH встановлюється таким чином, що система знайде цю версію перед версією 'system' (яка повинна бути в /usr/bin/ld) . Якщо ви хочете створити за допомогою стандартних системних версій інструментів збирання , вам потрібно буде відрегулювати змінну середовища PATH так, щоб вона шукала /usr/binпопереду/usr/local/bin

Якщо ви хочете остаточно виправити змінну PATH, вам потрібно буде з’ясувати, де ви її встановили спочатку - ймовірно, у вашому файлі ~ / .bashrc, але можливі й інші місця. Крім того, якщо вам просто потрібен тимчасовий виправлення для цієї збірки, ви можете спробувати

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

в терміналі перед виконанням ./configure

Однак іноді є вагомі причини, чому ви (або ваш системний адміністратор) можуть захотіти використовувати версії інструментів з /usr/local- якщо так, то вам потрібно буде з’ясувати, чому ldце, мабуть, не сумісне з рештою ланцюга збирання та виправити це - якщо це робота чи школа, то зверніться до системного адміністратора чи ІТ-відділу.


9
Зазвичай /usr/local/binпопереду /usr/binвPATH з поважної причини: немає сенсу в установці програми на місцевому рівні , якщо версія від розподілу має пріоритет. Хороша робота з виявленням проблеми, але рекомендована резолюція полягає не в тому, щоб змінити PATH, а щоб видалити або виправити помилку /usr/local/bin/ld.
Жил "ТАК - перестань бути злим"

@steeldriver: Якщо його немає в ~ / .bashrc, я можу просто скопіювати і вставити рядок "export PATH =" / usr / bin: $ PATH "". Або це створить проблему для інших програм?
нака

@Gilles Я відредагував мій відповідь , щоб відобразити свій коментар @naka Раджу проти цього, це викличе ще більшу плутанину в довгостроковій перспективі - ви повинні прийняти до відома зауваження Жиля і з'ясувати , чому ваш адміністратор налаштував PATH використовувати версія in/usr/local
steeldriver

3
У мене така ж помилка… це не спрацювало для мене… which ldповертається лише /usr/bin/ld….
ізоморфізми

9

На відміну від складних причин, наведених вище, у моєму випадку це був просто випадок не g++встановлення. Як не дивно, повідомлення про помилку було таким же, як описано в ОП, тобто

configure: error: C compiler cannot create executables

У будь-якому разі я вирішив це, встановивши g ++:

sudo apt-get install g++

0

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

Можливо, вам буде потрібно вимкнути або налаштувати попереднє посилання в /etc/systemctl або там, де ваші дистрибутиви встановлюють це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.