当 gcc 4.9 与较新的 gcc 安装在同一目录中时,如何使用它

当 gcc 4.9 与较新的 gcc 安装在同一目录中时,如何使用它

我已经在同一个目录中安装了 gcc 5 和 gcc 4.9 ( /usr/bin)。由于两者都在同一个目录中,因此无法使用nvccwith 。 --compiler-bindirgcc

我需要运行命令nvcc --compiler-bindir /path/with/older/gcc/directory。当两个 gcc 都在同一个目录中时可以这样做吗?

答案1

我假设nvcc是 nVidia CUDA 编译器,这个答案就是基于此,但由于您没有提供该信息,所以这只是一个猜测......


以下是 CUDA 工具包文档的片段(位于http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/):

在所有平台上,将使用当前执行搜索路径中找到的默认主机编译器可执行文件(gccg++Linux clangclang++Mac OS X 和cl.exeWindows 上),除非另行指定适当的选项(请参阅文件和路径规范)。——更多信息请参见: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您想要的,然后在完成后再将其切换回来。

那么,这应该允许您暂时使用一个编译器gccg++调用,而不必指定编译器目录。

请注意,这可能也需要完成g++- 特别是给出上面文档中的片段。 因此,使用g++而不是gcc来改变 的g++‘要使用的版本’。

问题是,在这种情况下,我找不到比这更简单的方法了。因此,每次您以这种方式进入并更改编译器时,要将其恢复为默认值,您需要update-alternatives再次运行命令以将其重新设置为原来的值。


或者,您可以尝试使用钢铁司机,它指向另一个潜在的解决方案(在 Unix 和 Linux 网站上):

我见过的方法别处是将所需的 gcc-xy 版本符号链接到 /usr/local/cuda/bin/gcc (对于 g++-xy 也是如此) - 这不再有效吗?

根据我读过的文档片段,我不确定这种方法是否有效,但它可能会有效,因为这个答案已经存在一段时间了。

相关内容