windows下编译ChezScheme

本文档介绍了在Windows 7系统中,使用Visual Studio 2013编译ChezScheme 9.4的详细步骤。首先需要安装git for windows,然后从GitHub获取ChezScheme 9.4版本并解压。接着配置项目,包括设置可执行文件、包含目录和库目录。在编译过程中,由于VS2013对C99标准支持不全,可能会遇到错误,但通过代码修改可以解决这个问题,最终成功编译出scheme.exe。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Prerequisite

编译细节

1. 下载ChezScheme

ChezScheme从github上下载9.4版本到本地并解压

注:如果是编译最新的版本(如9.4.1),则需要依赖vs2015,由于我只安装了vs2013故无法编译此版本的ChezScheme
对于9.4.1版本可以从github上clone到本地仓库

git clone https://github.com/cisco/ChezScheme.git ChezScheme

2. 配置项目

  • 切换目录到ChezScheme,然后执行如下操作
mkdir build %创建build目录
./configure -m=ta6nt

3. 编译

  • 设置可执行文件目录
set path=%path%;D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64;D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin;C:\Program Files (x86)\Windows Kits\8.1\bin\x64;C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64;C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools
  • 设置包含目录
set include=D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include;D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include;C:\Program Files (x86)\Windows Kits\8.1\Include\um;C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\winrt;%include%
  • 设置库目录
set lib=D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\amd64;D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\lib\amd64;C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64;%lib%
  • 生成scheme和pettie
cd ta6nt\c
nmake /f Makefile.ta6nt

执行完成上面的命令后可能会出现如下错误

io.c(43) : warning C4013: “snprintf”未定义;假设外部返回 int
stats.c(39) : error C2079: “starting_mono_tp”使用未定义的 struct“timespec”
stats.c(133) : error C2037: “tv_sec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(134) : error C2037: “tv_nsec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(139) : error C2037: “tv_sec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(140) : error C2037: “tv_nsec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(158) : error C2037: “tv_sec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(159) : error C2037: “tv_nsec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(164) : error C2037: “tv_sec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(165) : error C2037: “tv_nsec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(178) : error C2037: “tv_sec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(179) : error C2037: “tv_nsec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(183) : error C2037: “tv_sec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(184) : error C2037: “tv_nsec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(198) : error C2037: “tv_sec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(199) : error C2037: “tv_nsec”的左侧部分指定未定义的结构/联合“timespec”
stats.c(290) : error C2079: “tp”使用未定义的 struct“timespec”
stats.c(293) : warning C4133: “函数”: 从“int *”到“timespec *”的类型不兼容
stats.c(295) : error C2224: “.tv_sec”的左侧必须具有结构/联合类型
stats.c(296) : error C2224: “.tv_nsec”的左侧必须具有结构/联合类型
stats.c(299) : error C2224: “.tv_sec”的左侧必须具有结构/联合类型
stats.c(300) : error C2224: “.tv_nsec”的左侧必须具有结构/联合类型
stats.c(316) : error C2079: “tp”使用未定义的 struct“timespec”
stats.c(318) : warning C4133: “函数”: 从“int *”到“timespec *”的类型不兼容
stats.c(319) : error C2224: “.tv_sec”的左侧必须具有结构/联合类型
stats.c(320) : error C2224: “.tv_nsec”的左侧必须具有结构/联合类型
stats.c(320) : error C2198: “Sinteger”: 用于调用的参数太少
stats.c(409) : error C2039: “tm_gmtoff”: 不是“tm”的成员
.......

这是由于vs2013对于C99的支持并不完善,而vs2015是完整支持C99的,因此对于vs2015而言应该不存在上面的问题。
如果使用的是低于vs2015的vs版本,那么我们可以修改代码来实现

//对于这类错误“warning C4013: “snprintf”未定义;假设外部返回 int”,可以在相应的原文件中添加如下的语句
#define snprintf _snprintf
//对于使用未定义的 struct“timespec”问题,可以自定义此结构体
struct timespec {
    time_t tv_sec;
    long   tv_nsec;
};
//对于“tm_gmtoff”: 不是“tm”的成员,可以暂时将对应的语句注释掉

完成如上的修改之后,我们在重新执行上面的命令,然后就可以将scheme.exe编译好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值