Closed myyerrol closed 1 year ago
开发环境 系统版本:WSL2 Ubuntu 20.04.5 LTS GCC版本:9.4.0 (Ubuntu 9.4.0-1ubuntu~20.04.1) 指令架构:riscv64
问题描述 在开启CONFIG_DIFFTEST宏之后,在nemu目录下执行make run命令,终端会报很多类似下图中的错误。
CONFIG_DIFFTEST
nemu
make run
原因分析 结合报错信息上网查找相关资料,得知optional是C++17标准中引入的新功能,而9.4.0版本的GCC默认使用的是C++11标准,所以需要在编译时通过参数指定C++标准版本。于是接下来我排查了动态生成的spike-diff/repo/build/Makefile文件,发现C++编译选项中已经添加了-std=c++17参数,即已经开启了对C++17标准的支持。但是为什么还会出现这种问题?optional是在GCC 7.2中首次从实验标准转为正式标准,GCC 9中肯定也存在。
optional
spike-diff/repo/build/Makefile
-std=c++17
后来终于发现在nemu/tools/spike-diff/Makefile中添加-std=c++17能编译成功,可是编译出错的位置是在spike仓库内部,并不在spike-diff中,说明在编译生成spike的静态链接库时编译依赖会向上传递?总之,该问题应该与GCC版本有关,某些版本的编译器需要手动添加参数。
nemu/tools/spike-diff/Makefile
spike
spike-diff
问题发现者 @Jasonyanyusong @myyerrol
解决方案 如下图所示,在nemu/tools/spike-diff/Makefile文件中的编译选项中添加-std=c++17即可。
fix in #63
开发环境 系统版本:WSL2 Ubuntu 20.04.5 LTS GCC版本:9.4.0 (Ubuntu 9.4.0-1ubuntu~20.04.1) 指令架构:riscv64
问题描述 在开启
CONFIG_DIFFTEST
宏之后,在nemu
目录下执行make run
命令,终端会报很多类似下图中的错误。原因分析 结合报错信息上网查找相关资料,得知
optional
是C++17标准中引入的新功能,而9.4.0版本的GCC默认使用的是C++11标准,所以需要在编译时通过参数指定C++标准版本。于是接下来我排查了动态生成的spike-diff/repo/build/Makefile
文件,发现C++编译选项中已经添加了-std=c++17
参数,即已经开启了对C++17标准的支持。但是为什么还会出现这种问题?optional
是在GCC 7.2中首次从实验标准转为正式标准,GCC 9中肯定也存在。后来终于发现在
nemu/tools/spike-diff/Makefile
中添加-std=c++17
能编译成功,可是编译出错的位置是在spike
仓库内部,并不在spike-diff
中,说明在编译生成spike的静态链接库时编译依赖会向上传递?总之,该问题应该与GCC版本有关,某些版本的编译器需要手动添加参数。问题发现者 @Jasonyanyusong @myyerrol
解决方案 如下图所示,在
nemu/tools/spike-diff/Makefile
文件中的编译选项中添加-std=c++17
即可。