Ich habe eine relativ neue RHEL 6.5-Installation, auf der ich GCCC 4.9 aus der Quelle installiert habe. Nachdem ich GCC 4.9 installiert hatte, deinstallierte ich die von der Distribution bereitgestellte ältere GCC-Version über:
sudo yum remove gcc
GCCerscheintmuss korrekt installiert und für Benutzer und sichtbar sein root
, aber wenn ich versuche, einen sudo
Befehl einzugeben, der den Compiler benötigt, kann er nicht gefunden werden.
Mir scheint, dass das nicht auf „während“ PATH
verweist , aber ich verstehe nicht, warum.g++
sudo
g++
ist installiert in:
[john@haley boost_1_55_0]$ which g++
/usr/local/bin/g++
Und das Abrufen der Version als Benutzer und als root
erfolgreich:
[john@haley boost_1_55_0]$ g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[john@haley boost_1_55_0]$ sudo su -
root@haley /root # g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Aber sudo g++ --version
es schlägt fehl:
john@haley boost_1_55_0]$ sudo g++ --version
[sudo] password for john:
sudo: g++: command not found
[john@haley boost_1_55_0]$
Überprüfen des PATH
als sudo
:
[john@haley boost_1_55_0]$ sudo echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/home/john/bin:/usr/local/bin
^^^^^^^^^
... scheint darauf hinzudeuten, dass sich der Standort g++
tatsächlich im Pfad befindet.
Warum schlägt dies fehl und was kann ich tun, um das Problem zu beheben?
Beantwortung von Fragen in Kommentaren:
ja, ich kann es mit expliziten Pfaden unter folgendem ausführen sudo
:
[john@haley boost_1_55_0]$ sudo /usr/local/bin/g++ --version
[sudo] password for john:
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[john@haley boost_1_55_0]$
Es wurde festgestellt, dass ich es falsch gemacht habe, als ich das überprüft habe sudo PATH
. Wenn man es richtig macht, stellt man fest, dass es in der Tat so /usr/local/bin
istnichtin sudo
's PATH
:
[john@haley boost_1_55_0]$ sudo env | grep PATH
13:PATH=/sbin:/bin:/usr/sbin:/usr/bin
[john@haley boost_1_55_0]$
Antwort1
Ich poste dies als Antwort, weil ich diese Lösung durch Kommentare zum OP entdeckt habe, aber ich bin nicht sicher, ob das das ist, was ichsollenTun.
Ich kann dies zum Laufen bringen, indem ich die einzuschließende Datei ausführe sudo visudo
und bearbeite .secure_path
/usr/local/bin
Auf meinem System lautet die Originalzeile:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Ändern Sie es in:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
„behebt“ das Problem:
[john@haley boost_1_55_0]$ sudo g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[john@haley boost_1_55_0]$