configure: error: kompilator C nie może tworzyć plików wykonywalnych

15

Próbowałem zainstalować rvm przy użyciu \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles. Działało dobrze, dopóki nie wystąpił błąd konfiguracji:

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.

Poniżej znajduje się zawartość wspomnianego pliku dziennika:

[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

Następnie wypróbowałem program C „hello world” i podczas kompilacji wystąpił następujący błąd:

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

Nie jestem pewien, dlaczego ten błąd jest zgłaszany. Na forum nie mogłem znaleźć zadowalającej odpowiedzi na to pytanie. Czy ktoś mógłby pomóc? Dzięki

naka
źródło
1
Wystąpił ten błąd, gdy omyłkowo podałem CXXFLAGS dla CPPFLAGS podczas uruchamiania skryptu „./configure”. Tak więc komunikat o błędzie nie wyjaśnia dokładnego błędu.
RajaRaviVarma

Odpowiedzi:

12

Wygląda na to, że masz ldw swoim /usr/local/binkatalogu niestandardową wersję konsolidatora GNU (prawdopodobnie zainstalowaną ze źródła), a zmienna środowiskowa PATH jest ustawiona tak, że system znajduje tę wersję przed wersją „systemową” (która powinna być w /usr/bin/ld) . Jeśli chcesz budować przy użyciu standardowych systemowych wersji narzędzi do budowania , musisz dostosować zmienną środowiskową PATH, aby wyszukiwała /usr/binprzed/usr/local/bin

Jeśli chcesz trwale naprawić zmienną PATH, musisz dowiedzieć się, gdzie ją pierwotnie ustawiłeś - prawdopodobnie w pliku ~ / .bashrc, ale możliwe są inne lokalizacje. Alternatywnie, jeśli potrzebujesz tymczasowej poprawki dla tej kompilacji, możesz spróbować

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

w terminalu przed uruchomieniem ./configure

Jednak czasami istnieją dobre powody, dla których Ty (lub administrator systemu) możesz chcieć, abyś używał wersji narzędzi z /usr/local- jeśli tak, to musisz dowiedzieć się, dlaczego ldnie są one zgodne z resztą łańcucha kompilacji i naprawić to - jeśli jest to system pracy lub szkoły, skontaktuj się z administratorem systemu lub działem IT.

steeldriver
źródło
9
Normalnie /usr/local/binwyprzedza /usr/binw PATHdobrego powodu: nie ma sensu w program zainstalowany lokalnie jeśli wersja z dystrybucji ma pierwszeństwo. Dobra robota wykrywa problem, ale zalecaną rozdzielczością nie jest zmiana PATH, ale usunięcie lub naprawienie uszkodzonej /usr/local/bin/ld.
Gilles „SO- przestań być zły”,
@steeldriver: Jeśli nie ma go w ~ / .bashrc, mógłbym po prostu skopiować i wkleić wiersz „eksport PATH =” / usr / bin: $ PATH ”„ tam. A może stworzyłby problem dla innych programów?
naka
@Gilles Zredagowałem swoją odpowiedź, aby odzwierciedlić twój komentarz @naka Odradzam, spowoduje to więcej zamieszania na dłuższą metę - powinieneś zanotować komentarz Gillesa i dowiedzieć się, dlaczego administrator skonfigurował ŚCIEŻKĘ do korzystania z wersja in/usr/local
steeldriver
3
Wystąpił ten sam błąd… to nie działało dla mnie… which ldzwraca tylko /usr/bin/ld
izomorfizmy
9

W przeciwieństwie do skomplikowanych powodów podanych powyżej, w moim przypadku był to po prostu przypadek braku g++instalacji. Co dziwne, komunikat o błędzie był taki sam, jak opisany przez PO, tj

configure: error: C compiler cannot create executables

W każdym razie rozwiązałem ten problem, instalując g ++:

sudo apt-get install g++
rahul1210
źródło
0

Spróbuj zaktualizować system, zainstaluj ponownie pakiety dostarczające ld i kompilatora ( gcc ). Uruchom prelink -au && depmod -a. Następnie uruchom ponownie.

Może być konieczne wyłączenie lub ponowna konfiguracja linku wstępnego w /etc/systemctllub tam, gdzie konfiguruje to dystrybucja.

użytkownik599717
źródło