by chesium 2022/7/24 深夜

参考:https://github.com/mthom/scryer-prolog/blob/master/README.md

采用 msys2 环境编译

On Windows, Scryer Prolog is easier to build inside a msys2 environment as some crates may require native C compilation. However, the resulting binary does not need msys2 to run. When executing Scryer in a shell, it is recommended to use a more advanced shell than mintty (the default msys2 shell). The Windows Terminal works correctly.

  1. 下载msys2官网,并安装

    • 安装耗时较长
    • 不要安装在C:\Program Files等路径包含空格的位置,不然后续编译中会报错。
    • (可选)配置Windows Terminal终端:(最好加上管理员权限,如采用 gsudo
    <...>\msys2_shell.cmd -defterm -no-start
  2. 给 msys2 安装diffutilsm4,不然后续编译会报错:
    pacman -S diffutils
    pacman -S m4
  3. 安装 Rust(到 Windows 系统中即可),参照官网(安装时选2) Customize installation,将默认为x86_64-pc-windows-msvc的基础编译工具更换为x86_64-pc-windows-gnu,其他选项采用默认。参考),并添加到 msys2 的环境变量中:
    export PATH=$PATH:/c/Users/<用户名>/.cargo/bin
  4. 同样的,将 Windows 下gcc.exe所在的文件夹也添加到 msys2 的环境变量中,(不然后续编译会报错)格式见上。若未安装,可自行查找安装教程。
  5. 克隆代码库:https://github.com/mthom/scryer-prolog.git至任意文件夹(最好到msys2的home/<username>文件夹里),将 msys2 终端cd到该目录中。
  6. 编译:在 msys2 终端中执行 cargo run --release,如果嫌输出信息太少感觉卡住了可以加上-vv选项
    • 编译过程耗时较长,其中最后的opensslgmp-mpfr-sys编译耗时最长,前面讲到的“不做就会报错”的“报错”基本都是在编译gmp-mpfr-sys时产生的。
  7. 编译完成后<代码库路径>/target/release/scryer-prolog.exe"即为输出。(就是一个单文件,无需额外的库文件了)

最后输出的单.exe文件有133MB,我觉得太大了,更成熟的SWI-Prolog只占用44MB(v8.4.0版本)。

作者的README中还提到可以为 scryer-prolog 生成一个.msi安装包,不过我试了一下,生成的安装包就只是简单地把scryer-prolog.exe复制到了C:\Program Files中的一个文件夹里,没啥意义。

在 Windows msys2 下编译 scryer-prolog的更多相关文章

  1. Libevent windows/linux下编译

    1.windows下: 编译环境: windows xp sp3 + vs2010 (1)    解压libevent-2.0.21-stable.tar.gz到D:\libevent-2.0.21- ...

  2. Openstack 二次开发之:在windows 环境下编译Openstack-java-sdk

    在windows环境下使用maven对openstack-java-sdk进行编译 编译源文件 下载源代码 git clonehttps://github.com/woorea/openstack-j ...

  3. WebKit 在 Windows 平台下编译小结

    虽然WebKit 已经越来越多的被广大程序员接受,但其编译过程却非常之痛苦.下面将我编译WebKit 代码的经验与大家分享. 1) 获取WebKit 源代码 WebKit 源代码是使用Subversi ...

  4. 在Windows 环境下编译Qt静态库(QT5.32)

    参考链接 Qt5.3 Tools and Versions MinGW ICU ActivePerl Qt 安装MinGW工具链环境 这里在Win32环境下要安装一个MinGW工具链,这里最好是先安装 ...

  5. 在windows环境下编译hadoop

    1.环境准备 1.1 JDK的安装 下载jdk1.6.0_43(这里务必要使用jdk的1.6版本,因为使用JDK1.7版本编译hadoop的时候,很多Maven依赖下载不完整,最终会报错)解压到,并将 ...

  6. Windows环境下编译Assimp库生成Android可用的.so或.a文件

    在做项目过程中需要使用Assimp这个3D模型读取库来读取obj格式的模型,因为项目是基于Android平台,采用NDK开发,所以就打算编译Assimp库并生成.so文件.本文使用Assimp-v.5 ...

  7. 【Code::Blocks】windows 环境下编译 Code::Blocks(已修正)

    Code::Blocks 在2012-11-25发布了最新的12.11版本,相比上一个版本(10.05),Code::Blocks 进行了许多改进和更新(Change log). 引用 Wikiped ...

  8. 实用图像处理入门 - 2 - Windows平台下编译openCV

    标签中的部分 font-family: 华文细黑; font-size: 26px; font-weight: bold; color: #611427; margin-top:40px; } h2 ...

  9. go语言在Windows系统下编译成linux系统可执行文件

    package main import ( "fmt" "os" "os/exec" ) //filepath: 要编译的文件的路径 fun ...

随机推荐

  1. python appium server代码启动和关闭遇到的坑

    第一次使用博客,小白级,互相交流,有说的不对的地方欢迎来喷!!! 自动化的目的就是减少人工成本,如果每次跑自动化用例时都要手动起appium客户端,太费事了~~故,将appium server的调起和 ...

  2. python牛顿法求一元多次函数极值

    现在用牛顿法来实现一元函数求极值问题 首先给出这样一个问题,如果有这么一个函数$f(x) = x^6+x$,那么如何求这个函数的极值点 先在jupyter上简单画个图形 %matplotlib inl ...

  3. Web安全学习笔记 SQL注入下

    Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ...

  4. 关于Linux添加字体

    安装字体命令 yum -y install fontconfig 查看已经安装的字体 fc-list # 查看已经已经安装的中文字体 fc-list :lang=zh 在字体目录下创建新的目录或者使用 ...

  5. 组织:ISO

    国际标准化组织(ISO)是一个全球性的非政府组织,成立于1947年,总部位于瑞士日内瓦. 该组织负责绝大部分领域(包括军工.石油.船舶等垄断行业)的标准化活动,中国是其正式成员,代表中国参加的国家机构 ...

  6. django三板斧与request对象方法与ORM

    目录 django三板斧 HttpResponse() render() redirect() 网页获取静态文件样式 request对象方法 post请求问题 针对get请求和post请求执行不同代码 ...

  7. ES6 - promise(1)

    今天决定对之前学过的一些前端的知识进行梳理和总结,因为最近都是独自承担项目的开发与搭建,所以先从前后端交互的第一线axios来梳理,复习axios首先一定要先复习promise对象. 什么是promi ...

  8. 渗透测试之sql注入验证安全与攻击性能

    由于渗透测试牵涉到安全性以及攻击性,为了便于交流分享,本人这里不进行具体网址的透露了. 我们可以在网上查找一些公司官方网站如(http://www.XXXXXX.com/xxxx?id=1) 1.拿到 ...

  9. split(),strip,split("/")[-1] 和 split("/",-1)的区别

    Python中split()函数,通常用于将字符串切片并转换为列表. 一.函数说明: split():语法: str.split(str="",num=string.count(s ...

  10. Java并发3

    轻量级锁:如果一个有多个线程访问,但多线程访问的时间是错开的,没有竞争,那么可以使用轻量级锁来优化: monitor:重量级锁: 正常我们使用synchronized时,没有竞争则是轻量级锁,当遇到竞 ...