【问题标题】:How do I select GCC version in nix-shell?如何在 nix-shell 中选择 GCC 版本?
【发布时间】:2018-10-21 00:17:40
【问题描述】:

我请求的是 GCC 8,但我得到的是 GCC 7。

$ nix-shell -p gcc8
[nix-shell:~]$ gcc --version
gcc (GCC) 7.3.0

发生了什么事?

【问题讨论】:

    标签: nixos


    【解决方案1】:

    您需要将环境基于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
            #...
        ];
      };
    }
    

    现在,它按预期工作了

    $ nix-shell
    [nix-shell:~]$ gcc --version
    gcc (GCC) 8.1.0
    

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

    【讨论】:

    • 我想你也可以提一下wiki关于这个问题的说法:nixos.wiki/wiki/C#Use_a_different_compiler_version
    • 如果另外,我还想要一个cmake 2.8.8 版本呢?顺便说一句,从gcc8ruby_2_4 的外观来看,该版本似乎没有标准的格式方式,并且很难获得。是否有这些不同版本的索引列表?
    • 最好提出单独的问题。我唯一能回答的是如何确定可用的内容。我通常在 nixpkgs 存储库中查看 pkgs/top-level/all-packages.nix,github.com/NixOS/nixpkgs/blob/…
    • 顺便说一句,将cmake_2_8 放入包列表是否有效?答案中的各种 ruby​​ 等包不需要 gcc 工作,这正是我当时除了 gcc8 需要的环境
    • 我在列表中添加了cmake_2_8,它给了我cmake version 2.8.12.2。谢谢。我还观察到,它给了我gcc 8.2.0。然而,你得到了gcc 8.1.0。我在这里选择的理解是buildInputs 列表中的gcc8 是二进制编译并存储在某处,然后他们认为合适时将其撞到较新的 gcc 版本。这让我问,除了这个二进制缓存,还有其他的吗?
    【解决方案2】:

    请改用nix run。它表现得更好,下载包时也有更好的进度指示器。

    jdanek@nixos ~ % nix run -f channel:nixos-19.03 gcc8
    [jdanek@nixos:~]$ gcc --version
    gcc (GCC) 8.3.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2016-01-16
      • 1970-01-01
      相关资源
      最近更新 更多