如何在nix-shell中指定GCC版本?请求GCC8却得到GCC7
为什么nix-shell指定gcc8却得到GCC 7.3.0?
这个问题我之前折腾Nix的时候也碰到过,核心原因是Nixpkgs对版本化GCC包的命名规则:
当你用nix-shell -p gcc8安装的是带版本后缀的GCC包,它提供的可执行文件是gcc-8、g++-8这类带版本号的命名,而不是直接覆盖系统默认的gcc命令。你输入gcc时调用的其实是环境中优先级更高的旧版本(比如系统自带的7.3.0)。
先验证一下
你可以在当前的nix-shell里直接执行带版本号的命令,就能看到你要的GCC 8了:
[nix-shell:~]$ gcc-8 --version
两种解决办法
方法一:直接安装带默认命令的指定版本GCC
改用这条命令进入shell,这样gcc就会直接指向GCC 8:nix-shell -p gcc.cc=gcc8或者更清晰的写法:
nix-shell -p '(gcc.override { version = "8"; })'方法二:手动调整PATH优先级
如果你已经进入了nix-shell -p gcc8的环境,也可以临时把gcc8的bin目录放到PATH最前面:export PATH=$(dirname $(which gcc-8)):$PATH之后再运行
gcc --version,就能看到GCC 8的版本输出了。
内容的提问来源于stack exchange,提问作者user7610
相关产品推荐
相关产品推荐

