摘要:在Win10上面搭建了开源的C语言解释器picoc的编译环境,并进行测试验证。
picoc 是一款开源的C语言解释器,类似于lua和Python一样,picoc可以直接解释和执行C语言源代码。这个真的是很好很强大,让我忍不住去搭了个环境测试验证一下。
一、Linux环境安装
在Win10下测试Linux程序可以使用虚拟机也是可以装双系统,但是都比较麻烦。对于大部分的情况,可以直接安装Ubuntu子系统来实现。
在Microsoft Store中搜索Ubuntu,可以发现有很多可用的版本,从18.04到最新版。
由于Linux版本对测试没啥影响,这里选择是18.04.5,这个只有不到300MB,占地方比较小😊。
安装完成后运行时出现如下错误:
这个需要打开Win10系统对Linux子系统的支持。在“控制面板à程序与功能à启用或关闭Windows功能”中把“适用于Linux的Windows子系统”给选上。装了半天终于完成,居然还要重启才能用,差评☹。
如果重启后还是不行出现同样提示,则需要在具有管理员权限的Windows PowerShell中运行以下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
重启后Ubuntu即可使用。
二、环境设置
其实在正常的Ubuntu系统中,是没有什么环境需要设置的。但是我安装的这个Ubuntu子系统居然连make和gcc都没有,差评!☹
安装make:
sudo apt-get install make
安装gcc时需要先更新一下然后再安装:
sudo apt-get install update
sudo apt-get install gcc
安装完成后可以显示一下版本看看是否正常:
因为安装的时候没有指定版本,默认应该是安装系统支持的最新版本,这里显示是7.5.0。
三、picoc编译及测试
由于picoc有很多人在研究和使用,因此网上很多分支,大家可以根据自己的需要去选择(需要注意的是,各种fork版本有可能被相应的作者做过改动,大家自己去看看相应的功能是不是你需要的)。我最早看到的是这个分支版本https://github.com/jpoirier/picoc,然后才找到原始版本的路径。早几年代码是放在在github上面,现在已经迁移到gitlab上面了。
原始源码路径:https://gitlab.com/zsaleeba/picoc
1.编译
因为我懒得装各种版本管理软件,所以是直接下载源代码后在本机编译的。
Ubuntu子系统会把Win10系统的所有硬盘全部加载到/mnt下面,如下图所示:
在Ubuntu18下面进行编译会提示“readline/readline.h: No such file or directory”错误。
这个需要安装readline库,命令如下:
sudo apt-get install libreadline-dev
编译安装:
cd picoc
make all
程序运行参数格式如下:
picoc有程序运行方式,即需要main()函数作为入口点;也有脚本运行方式,即无需调用main()函数直接运行语句。
*.c [-<arg1>]:运行指定名称的程序,注意程序中需要有main()函数作为入口点。
-s *.c [-<arg1>]:运行指定名称的脚本。
-i:交互模式,Ctrl+D退出。
-c:版权信息。
-h:帮助信息。
2.程序测试
运行tests目录下的if测试程序14_if.c:
./picoc ./tests/14_if.c
该测试程序的内容如下:
#include <stdio.h>
int a = 1;
if (a)
printf("a is true\n");
else
printf("a is false\n");
int b = 0;
if (b)
printf("b is true\n");
else
printf("b is false\n");
int *c = 0;
if (c)
printf("c is true\n");
else
printf("c is false\n");
if (!c)
printf("c is true\n");
else
printf("c is false\n");
c = &b;
if (c)
printf("c is true\n");
else
printf("c is false\n");
if (!c)
printf("c is true\n");
else
printf("c is false\n");
void main() {}
结果如下:
在其源码的tests/目录下面还有各种测试用的代码和对应的结果可供大家参考。
由于这个版本既支持C语言程序,也可以采用脚本的方式运行,而且代码量也不大,很适合用来学习和验证自己的想法。后续打算对其功能做一些分析,然后根据自己的想法做一些改造。如果有时间的话会把写一些分(学)析(习)文(笔)章(记),不敢保证,尽量不偷懒吧^_^~~~~
-----------------------------------
原创不易,请多支持!