如何在nix-shell中选择GCC版本?

use*_*610 3 nixos

我要求的是GCC 8,但我却得到了GCC 7。

$ nix-shell -p gcc8
[nix-shell:~]$ gcc --version
gcc (GCC) 7.3.0
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

use*_*610 6

您需要基于stdenvNoCC而不是stdenv

这意味着,您可以在当前目录中创建一个shell.nixdefault.nix文件,定义环境,然后运行nix-shell

with import <nixpkgs> {}; {
  qpidEnv = stdenvNoCC.mkDerivation {
    name = "my-gcc8-environment";
    buildInputs = [
        gcc8
        go
        ruby_2_4
        gdb
        swig
        # libev
        #...
    ];
  };
}
Run Code Online (Sandbox Code Playgroud)

现在,它按预期工作

$ nix-shell
[nix-shell:~]$ gcc --version
gcc (GCC) 8.1.0
Run Code Online (Sandbox Code Playgroud)

来源:https//groups.google.com/forum/#!topic / nix- devel / of6P-sEtQN0

  • 我想您也可以提及Wiki关于此问题的说法:https://nixos.wiki/wiki/C#Use_a_different_compiler_version (2认同)
  • 我想指出的是,虽然这解决了问题,但这并不能解释为什么新安装的 gcc 的路径没有比现有的路径具有更高的优先级。这感觉违反直觉,所以我认为这是有充分理由的,但很高兴在答案中听到这个理由。 (2认同)