所使用的虚拟机:
- vritualbox
- ubuntu22.04
问题一:无法安装libsdl2-dev,可能破坏依赖关系
执行sudo apt-get install libsdl2-dev
时提示可能破坏已有依赖关系,参考本篇回答,在执行apt-get dist-upgrade
之后,成功安装。
问题二:make[1]: bison: Command not found;make[1]: flex: Command not found
执行make menuconfig
之后出现的。这两个都是同类的问题,是由于缺少bison和flex导致的,所以只要执行:
sudo apt-get install bison
sudo apt-get install flex
即可。
问题三:llvm/Support/TargetRegistry.h: No such file or directory
在nemu目录中执行make
时出现这样的错误。
原因是22.04默认安装的llvm版本为14,可以执行llvm-config --version
看一下,PA所需要的llvm版本是11,而14中是没有TargetRegistry.h的,所以可以通过首先安装llvm-11来获取该文件:
sudo apt-get install llvm-11
安装完以后就可以在/usr/lib/llvm-11/include/llvm/Support中找到这一头文件然后放进/usr/lib/llvm-14/include/llvm/Support中。
再次执行make后可能会出现error: enumeration value ‘GOFF’ not handled in switch [-Werror=switch]这样的错误,其实是因为switch分支结构缺少default,所以找到错误提示中的文件和switch分支,添加default:break;
即可。