Posts WSL的cool语言环境配置
Post
Cancel

WSL的cool语言环境配置

在Windows统治PC端操作系统的今天,需要用Linux跑程序的时候,往往又不想配置庞大而缓慢的虚拟机。在这种情况下,WSL是一个非常好的替代方案。cool语言作为编译器设计实验中常用的程序设计语言,必须要在Debian系(如Ubuntu)的Linux系统中运行,本文介绍如何在WSL中配置cool语言的编译运行环境,帮助同学更好地完成实验。

一、 初步配置WSL

关于WSL的介绍和基础配置请见我的另一篇博客:WSL基础部署

二、 安装i386

WSL默认情况下不支持运行32位程序(但虚拟机/实机可以),由于cool年代久远,我们需要让我们的WSL支持32位程序才可以运行coolc等文件。

否则就会出现以下错误

1
cannot execute binary file: Exec format error

安装i386及其依赖的命令如下

1
2
3
4
5
6
7
8
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get dist-upgrade

$ sudo apt-get install g++-multilib
$ sudo apt-get install libncurses5:i386
$ sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.8-base:i386 libstdc++5:i386 libstdc++6:i386
$ sudo apt-get install lib32z1 lib32ncurses5 lib32ncursesw5 lib32ncursesw5-dev

之后执行命令

1
2
$ sudo apt install qemu-user-static
$ sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'

在关机重启后会发现i386失效,这时需要重新运行命令使i386生效

1
$ sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'

这是一条很冗长的命令,没人想手动运行它,我们可以将其写入脚本、加入开机自启项,具体方法请见底部相关链接

此外我们可以手动运行这个脚本

enablei386.sh

1
2
3
#!/bin/bash

sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'

保存后执行下面的命令即可启用i386

1
$ sh enablei386.sh

关于更多WSL32bit程序运行的讨论,请参见底部相关链接

三、 执行./coolc

等待所有命令执行完毕之后,再运行./coolc,可以看到运行成功

coolc运行成功

小技巧:在目标文件夹中按住Shift键后点击右键,选项框中会出现在此处打开Linux shell,打开的命令行窗口会自动将工作文件夹切换至此

在此处打开Linux Shell

四、 将coolc所在文件夹加入环境变量

加入环境变量之前,我们需要把cool文件夹的位置确定下来,这里建议

  • 放在windows系统可以访问到的位置,以便于使用windows的文本编辑器
  • 路径避免中文字符,从而规避编码可能带来的问题

将cool文件夹安置好之后,就可以添加环境变量了

  • 为了方便切换文件夹,我们添加环境变量COOL_HOME
  • 为了方便使用cool相关工具,我们将bin的目录加入到PATH

加入环境变量的有效期限有临时和永久两种

下面以cool路径为/mnt/c/WorkSpace/cool/为例:

1. 临时设置

可以直接使用命令

1
2
$ export PATH=$PATH:/mnt/c/WorkSpace/cool/bin/
$ export COOL_HOME=/mnt/c/WorkSpace/cool/

也可以写一个脚本

1
2
3
#!/bin/bash
export PATH=$PATH:/mnt/c/WorkSpace/cool/bin/
export COOL_HOME=/mnt/c/WorkSpace/cool/

2. 永久设置

可以修改profile文件:编辑/etc/profile, 在末尾加入

1
2
export PATH=$PATH:/mnt/c/WorkSpace/cool/bin/
export COOL_HOME=/mnt/c/WorkSpace/cool/

保存退出后使用source使设置生效:

1
$ source /etc/profile

我们同样可以不修改profile,修改~/.bashrc文件也可以达到相同的效果,在~/.bashrc文件末尾加入

1
2
export PATH=$PATH:/mnt/c/WorkSpace/cool/bin/
export COOL_HOME=/mnt/c/WorkSpace/cool/

保存退出后使用source使设置生效:

1
$ source ~/.bashrc

设置好环境变量后,我们就可以在任何文件夹,通过名字访问cool的工具、使用$COOL_HOME代替冗长的路径字符串

五. 编译运行hello world程序

hello_world.cl程序位于$COOL_HOME/examples/

首先是编译

1
$ coolc $COOL_HOME/examples/hello_world.cl

编译成功后会在当前文件夹中生成一个hello_world.s文件,里面是MIPS汇编代码,需要在spim虚拟机中运行:

1
$ spim -trap_file $COOL_HOME/lib/trap.handler -file $COOL_HOME/examples/hello_world.s

按下回车后,如果看到下面这段内容,则表明运行成功

1
2
3
4
5
6
7
SPIM Version 6.5 of January 4, 2003
Copyright 1990-2003 by James R. Larus (larus@cs.wisc.edu).
All Rights Reserved.
See the file README for a full copyright notice.
Loaded: ../lib/trap.handler
Hello, World.
COOL program successfully executed

六、 安装flex和bison

flex的功能是词法分析,bison的功能是语法分析。在确保换源成功后,运行下列指令即可安装flex和bison

1
$ sudo apt-get install flex bison

安装结束后检查是否成功

1
2
$ flex --version
$ bison --verson

出现以下内容则说明安装成功

flex-bison安装成功

七、相关链接

This post is licensed under CC BY 4.0 by the author.