您的位置:首页 > 其它

windows下编译ChezScheme

2016-07-12 15:26 627 查看

Prerequisite

安装git for windows

编译细节

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编译好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  win7 vs2013 ChezScheme