【问题标题】:Switch between different GCC versions在不同的 GCC 版本之间切换
【发布时间】:2017-05-04 00:47:58
【问题描述】:

我最近构建了一个旧版本的 GCC 并将其安装在我的主目录中(规范~/local/gcc-5.3.0)。但是,我只需要为 CUDA 项目使用此编译器,其余时间将使用系统编译器 (GCC 6.2.1)。所以,我想我需要找到一种在需要时在这些之间切换的方法,并且以一种同时改变库并适当地包含路径的方式。

我知道update-alternatives 是这样做的一种方法,但它似乎需要设置 root 权限,而我没有。

下一个最好的办法可能是在 .bashrc 中编写一个 shell 函数,以确保以下内容:

  • 每次调用都会在系统和本地 gcc 之间切换

  • 1234563以前的answer 建议修改LD_LIBRARY_PATH 就足够了,因为GCC 安装“知道”它自己的头文件和静态库在哪里(我不确定它是否正确,我想我可能需要修改@987654328 @ 等)。

以上是实现这一目标的最佳方法吗?如果是这样,在实现这样的功能时我应该设置哪些路径?

【问题讨论】:

  • 我个人的方法不是很复杂:我有一个 shell 脚本,它只是将 CUDA bin 目录和匹配的 gcc bin 目录添加到 $PATH。实际上我有多个脚本来保存不同的 CUDA 版本。当我停止使用 CUDA 或想要切换到其他版本时,我会打开一个新的 shell。
  • 你提到只将gcc的bin目录添加到PATH。如果不是include目录,是不是也需要修改LD_LIBRARY_PATH
  • nvcc 和 gcc 都知道它们的库所在的位置,因此只需更改 $PATH 就足够了。
  • 如果这只是用于nvcc,那么你可能只需要nvcc中的ccbin选项
  • CMake 不会轻易解决这个问题吗?

标签: c linux gcc cuda


【解决方案1】:

以上是实现这一目标的最佳方法吗?如果是这样的话, 在实现这样的功能时我应该设置哪些路径?

正如其他人指出的那样,PATHLD_LIBRARY_PATH 是强制性的。您也可以更新 MANPATH 以确保完整性。

我建议不要在.bashrc 中重新发明轮子,而是使用一个鲜为人知但非常方便且模块化的Environment Modules,它是为此特定目的而设计的。你可以像这样使用它们(一旦你为 gcc/3.1.1 设置了配置):

$ module load gcc/3.1.1
$ which gcc
/usr/local/gcc/3.1.1/linux/bin/gcc
$ module unload gcc
$ which gcc
gcc not found

【讨论】:

  • 似乎是一个非常漂亮的工具来配置 shell 环境变量。现在只需要弄清楚如何为我的目的实际编写模块文件。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 2020-05-08
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 2012-03-29
相关资源
最近更新 更多