南京大学计算机系统基础实验 ICSPA(2023)PA 0

PA 0 的主要内容就是安装实验需要用到的系统和环境。

我采用的是 windows10+wsl2 ,使用 vscode 来进行开发。在新版的 wsl2 中,linux 程序可以直接在 windows 系统里渲染出图形界面,体验非常无缝。再加上微软这几年对 wsl2 大力支持,开发了不少好用的功能,没有理由不用 wsl 来进行开发。

我没有使用 vscode 官方的 C/C++ 插件,而是使用 llvm 的 clangd 作为代码提示工具。相比于官方插件,clangd 拥有不少优势。具体的配置方法可以参考我的另一篇文章:在 vscode 中配置 clangd 来进行南大 PA 实验

我还配置了 zerotier 来实现从我的 mac 上进行远程连接,关于自建 zerotier planet 服务器的文章可以参考这个文章,以及这个 github 仓库。关于为什么要自建 planet 服务器,因为只建立 moon 服务器的话,客户端在连接 moon 的时候还是需要走官方的 planet 服务器,而这一过程也会造成卡顿。

需要注意的是,开发代码的机器必须要有显示功能。因为本课程需要运行一系列的模拟器,会有图形效果,如果没有显示功能的话会报错。因此如果是远程开发,还需要配置 VNC 或者其他远程桌面功能。

我推荐每一个人(不止学计算机的)都应当好好读一下提问的智慧别像弱智一样提问这两篇文章。这样在你请求他人帮助的时候,能极大地提高成功率,以及他人的好感度。

  • STFW:Search The Fucking Web。
  • RTFM:Read The Fucking Manuel。
  • RTFSC:Read The Fucking Source Code。
Unmet dependencies

在这一章节中的替换软件包源过程中,我遇到了一个问题:在执行完讲义提供的替换源的指令后,执行 sudo apt install build-essential 等一系列安装指令时,遇到了 Unmet dependencies 的问题(现场未能截图)。并且尝试了讲义提供的替换清华源的方法也未能解决。

研究后发现,是因为讲义提供的代码将源文件整个覆盖了,并且只添加了一条源。在自己搜索清华源的使用帮助并替换后,再次 sudo apt update 就解决了。

在这一章节里有一个任务,要求我们编写一个 Makefile 来编译我们的 Helloworld 程序。关于 Makefile 详细的教程,可以参考网上的资料,这里推荐一个我找到的解释的比较详细和生动的文章

简单来说,Makefile 的任务是帮助我们自动进行编译。当 make 命令执行之后,程序会自动检查每一个文件的修改情况,若有文件产生更新,或者其依赖的其他文件发生了更新,程序会自动进行编译和链接等操作,来自动化地管理我们的编译过程,以及避免重复的编译。

对于本任务,假设我们只有一个 hello.cpp 文件,那么可以编写如下的 Makefile 文件:

1
2
3
4
5
hello: hello.o
	g++ $< -o $@

hello.o: hello.cpp
	g++ -c $< -o $@

其中,$< 表示第一个依赖的文件,$@ 表示模板文件。编写完保存之后,在当前目录下直接执行 make 指令,便可以发现 make 帮我们执行了我们设定好的编译指令:

./pics/image0.png

github 网络问题

这里我遇到了一个网络问题。

我的校园网是无论如何也连不上 github 的,因此只能使用 clash-for-linux 来挂梯子。但是我发现,如果使用 ssh 协议(讲义使用的协议)来进行 git clone,会出现如下报错:

./pics/image1.png

猜测可能是梯子的问题,所以只能手动将协议从 ssh 换成 https:

1
git clone -b 2023 https://github.com/NJU-ProjectN/ics-pa.git ics2023

clone 下来之后,后边的 bash init.sh nemu 指令也会遇到一样的问题,同样需要修改 init.sh 文件里的相关内容:

./pics/image6.png

使用 Github 托管代码

如果你想用 Github 来托管代码,需要自己新建一个 repo,然后按照指引来推送代码。

由于讲义中 clone 代码的时候已经自动绑定了远程仓库,当使用 git remote add 指令来添加远程仓库的时候会遇到 error: remote origin already exists. 的问题,使用 git remote set-url 重新设置远程仓库的地址就可以了。

这里讲义里提到了会遇到一个问题:

./pics/image2.png

分析错误可知,这是 shell 在报错,报这个错误的原因是 bison 软件未安装,使用 apt 安装即可:

1
sudo apt install bison

安装完成之后发现又报了一个一模一样的错误,还是同样的方法安装 flex 软件即可。

bison 和 flex

如果写过其他的大型项目可以知道,这两个软件是十分常用的词法分析软件。按照相应语法编写文件,就可以生成对应的 C 文件,然后引用在项目之中。

利用这两个软件组合,可以用简洁的语法帮助我们构建词法树,方便我们进行词法匹配。

配置 clangd
我配置了 clangd 作为代码提示工具,可以在 vscode 中实现实时报错,代码跳转等功能。具体的配置方法可以参考我的另一篇文章:在 vscode 中配置 clangd 来进行南大 PA 实验

剩下的也没有什么值得记录的,都是按照讲义做就好了。PA0 到此结束。