You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
首先环境如下
MacOS 13.0
Rust toolchain都通过rustup update nightly更新过
grep 版本grep (BSD grep, GNU compatible) 2.6.0-FreeBSD(后面会提到为什么和这个有关系)
问题描述:
在clone下来test仓库之后,进入os文件夹,执行make run发现编译错误“error: linking with
rust-lld
failed: exit status: 1”,详细查看可以发现是一个symbol没有被找到,再一查看,user/build/bin内也没有二进制编译出来。解决过程
但进入user仓库通过
make build TEST=2 CHAPTER=2 BASE=1
可以直接编译出,于是怀疑是os仓库内的MakeFile规则出了错误导致没有正确传递TEST等参数到user仓库下的make。其中os/MakeFile中关于初始化这些变量的语句如下这里可以看到这里是默认BASE=1,TEST和CHAPTER都是通过执行指令获取的。再次执行,发现grep报错:“grep: invalid option -- P”,而这里CHAPTER是通过获取当前分支名“ch_”再通过grep匹配后面的数字(即optino P的功能)获取的,所以这里自然出了问题。检查自己的grep版本如上,通过更新grep
brew install grep
并添加环境变量后得以解决。关于这几个变量的具体作用,还请移步两个MakeFile文件自行阅读
类似问题诊断
首先查看user/build/bin下是否有文件编译成功,假如没有,并且在os仓库下执行make build/run/kernel之类的指令会以上grep错误的时候,至少确定grep不兼容,需要更换版本或者修改makefile使其正确输出。
我grep版本问题主要是因为macos带上的指令版本过于陈旧,实在是令人感叹,一路来踩过的坑基本都是macos的问题。
Beta Was this translation helpful? Give feedback.
All reactions