picoc编译器环境搭建及测试

摘要:在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语言程序,也可以采用脚本的方式运行,而且代码量也不大,很适合用来学习和验证自己的想法。后续打算对其功能做一些分析,然后根据自己的想法做一些改造。如果有时间的话会把写一些分(学)析(习)文(笔)章(记),不敢保证,尽量不偷懒吧^_^~~~~

-----------------------------------

原创不易,请多支持

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值