我已经在同一个目录中安装了 gcc 5 和 gcc 4.9 ( /usr/bin
)。由于两者都在同一个目录中,因此无法使用nvcc
with 。 --compiler-bindir
gcc
我需要运行命令nvcc --compiler-bindir /path/with/older/gcc/directory
。当两个 gcc 都在同一个目录中时可以这样做吗?
答案1
我假设
nvcc
是 nVidia CUDA 编译器,这个答案就是基于此,但由于您没有提供该信息,所以这只是一个猜测......
以下是 CUDA 工具包文档的片段(位于http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/):
在所有平台上,将使用当前执行搜索路径中找到的默认主机编译器可执行文件(
gcc
在g++
Linuxclang
、clang++
Mac OS X 和cl.exe
Windows 上),除非另行指定适当的选项(请参阅文件和路径规范)。——更多信息请参见:http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/#sthash.Tphx1Ttz.dpuf
基于此,您可能能够通过我现在已删除的答案中的方法在技术上“强制”暂时提供gcc
和版本......g++
这是有原因update-alternatives
的——它被设计成“符号链接” gcc
,类似于实际的可执行文件名称。实际上,/usr/bin/gcc-4.9
实际上是 gcc 4.9 编译器可执行文件,而只是指向实际 gcc 可执行文件的符号gcc
链接/etc/alternatives/gcc
在我的 14.04 环境中,如下所示:
% file /usr/bin/gcc
/usr/bin/gcc: symbolic link to `/etc/alternatives/gcc'
% file /etc/alternatives/gcc
/etc/alternatives/gcc: symbolic link to `/usr/bin/gcc-4.8'
我这里实际上有许多版本的 GCC,从 4.6 到 4.9,但这也适用于其他版本。
要暂时更改替代方案,可以使用以下命令:sudo update-alternatives --config gcc
这是在我的系统上显示的内容,末尾有一个闪烁的光标:
% sudo update-alternatives --config gcc
There are 4 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-4.8 60 auto mode
1 /usr/bin/gcc-4.6 30 manual mode
2 /usr/bin/gcc-4.7 50 manual mode
3 /usr/bin/gcc-4.8 60 manual mode
4 /usr/bin/gcc-4.9 40 manual mode
Press enter to keep the current choice[*], or type selection number:
我手动重做了优先级,但您可以看到,我可以手动选择要在此期间使用的编译器。因此,您可以暂时更改它,然后将其切换到gcc
您想要的,然后在完成后再将其切换回来。
那么,这应该允许您暂时使用一个编译器gcc
或g++
调用,而不必指定编译器目录。
请注意,这可能也需要完成g++
- 特别是给出上面文档中的片段。 因此,使用g++
而不是gcc
来改变 的g++
‘要使用的版本’。
问题是,在这种情况下,我找不到比这更简单的方法了。因此,每次您以这种方式进入并更改编译器时,要将其恢复为默认值,您需要update-alternatives
再次运行命令以将其重新设置为原来的值。
或者,您可以尝试使用钢铁司机,它指向另一个潜在的解决方案(在 Unix 和 Linux 网站上):
我见过的方法别处是将所需的 gcc-xy 版本符号链接到 /usr/local/cuda/bin/gcc (对于 g++-xy 也是如此) - 这不再有效吗?
根据我读过的文档片段,我不确定这种方法是否有效,但它可能会有效,因为这个答案已经存在一段时间了。