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
Odpowiedzi:
Wygląda na to, że masz
ld
w swoim/usr/local/bin
katalogu 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/bin
przed/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ć
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ę, dlaczegold
nie 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.źródło
/usr/local/bin
wyprzedza/usr/bin
wPATH
dobrego 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
./usr/local
which ld
zwraca tylko/usr/bin/ld
…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, tjW każdym razie rozwiązałem ten problem, instalując g ++:
źródło
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/systemctl
lub tam, gdzie konfiguruje to dystrybucja.źródło