未找到 nvcc,但仅在使用 sudo 时

未找到 nvcc,但仅在使用 sudo 时

我在 Linux 上什么都做不了。我尝试编译 CudaMiner. 输出sudo make

ypt-jane.o `test -f 'scrypt-jane.cpp' || echo './'`scrypt-jane.cpp
mv -f .deps/cudaminer-scrypt-jane.Tpo .deps/cudaminer-scrypt-jane.Po
nvcc -g -O2 -Xptxas "-abi=no -v" -arch=compute_10 --maxrregcount=64 --ptxas-options=-v -I./compat/jansson -o salsa_kernel.o -c salsa_kernel.cu
/bin/bash: nvcc: command not found
make[2]: *** [salsa_kernel.o] Error 127
make[2]: Leaving directory `/var/progs/CudaMiner'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/var/progs/CudaMiner'
make: *** [all] Error 2

这很有趣。输出nvcc

nvcc fatal   : No input files specified; use option --help for more information

而输出sudo nvcc

sudo: nvcc: command not found

~/.bashrc我在AND中列出了相同的出口/etc/bash.bashrc。(Nvcc 位于/usr/local/cuda-5.0/bin/nvcc:)

我也尝试改变当前路径,但无济于事:

$ sudo bash -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ PATH=$PATH:/usr/local/cuda-5.0/bin/nvcc
$ sudo bash -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

提前致谢!

答案1

因此,显然,当您使用 运行它时,nvcc不在 上。您可以使用以下命令确认这一点:PATHsudo

sudo bash -c 'echo $PATH'

最简单的解决方案是sudo使用绝对路径调用nvcc

sudo $(which nvcc)

当运行没有绝对路径的命令时,如nvcc,使用中的配置sudo值作为,例如在我的系统中:secure_path/etc/sudoersPATH

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

因此,即使您设置了PATHshell 通常提供的启动文件之一,它也不会起作用。如果您想sudo nvcc暂时让工作,只是为了让您的构建工作,我认为您有两个选择:

  • 编辑安装程序脚本并将以下行更改sudo nvccsudo /path/to/nvcc
  • nvcc在 列出的目录之一中创建符号链接secure_path,如下所示:sudo ln -s /path/to/nvcc /sbin/nvcc

更新

如果您很难找到的路径nvcc,您可以按以下顺序尝试这些命令(它们会越来越慢),直到找到匹配项:

which nvcc
find /usr/local/cuda-5.0 -name nvcc
find /usr/local/ -name nvcc
find /opt -name nvcc
find / -name nvcc

答案2

您可以使用-E选项来sudo保留您的用户环境。从手册页中:

 -E, --preserve-env
             Indicates to the security policy that the user wishesto preserve their existing environment
             variables.  The security policy may return an error if the user does not have permission to
             preserve the environment.

您可以使用以下方法测试:

$ sudo bash -c 'echo $PATH'

进而

sudo nvcc

答案3

原因可能是只读文件夹。就我而言,调用 nvcc 的“Make”文件位于只读文件夹中。更改文件夹权限设置解决了我的问题。

相关内容