参考 Building and Distributing Applications.

假设源码由两个文件组成,A.ssB.ss,其中 A.ss 依赖 B.ss。下面我们将其编译为可供分发的二进制文件。

将源码转为 object file

在 Chez Scheme 的 REPL 中(下同)输入

;; REPL
(compile-library "B.ss") ; by default it compiles to "B.so"
(compile-program "A.ss") ; by default it compiles to "A.so"

注:so 后缀是 Scheme object 的缩写,而非 Linux 系统下的 shared object 文件,尽管两者用途类似,但文件格式不同。

(可选)合并 object file

;; REPL
(concatenate-object-files "out.so" "B.so" "A.so")

scheme-start 包装程序入口

A.ss 中,用 scheme-start 包装程序入口,其中 fns 为命令行传入参数

;; A.ss
(scheme-start
(lambda fns
#;(initialize-application)
#;(start-application fns)))

将 object file 转为 boot file

;; REPL
(make-boot-file "out.boot" '("scheme") "out.so")
; (make-boot-file "out.boot" '("scheme") "B.so" "A.so")

将 Chez Scheme 可执行文件复制并命名为 boot file 的名称

## bash
cp /usr/bin/scheme ./out

可以运行了!

## bash
./out -b out.boot
# scheme -b out.boot

理论上 SCHEMEHEAPDIRS="%x:" ./out 也是可以的,这时应该会自动识别出 boot file 的文件名,但是我没有成功...

编译和分发 Chez Scheme 应用程序的更多相关文章

  1. 2018-01-04 浅尝The Little Prover一书, 重逢Chez Scheme

    书开篇之前说, 本书的目标的一个例子: 证明(reverse (reverse x))对于任何列表x, 结果总是x. (安装Chez Scheme的200字请看最后) 书刚开始, 就用到一个schem ...

  2. 在Mac OS X上用自己编译出的CoreCLR运行.NET程序

    当昨天被Mac OS X上无法编译CoreCLR的问题困扰时(详见Mac OS X上尝试编译CoreCLR源代码),后来发现这个难题竟然被神人@kangaroo给解决了,连CoreCLR的微软开发人员 ...

  3. 在SoCEDS环境下编译和更新preloader和uboot程序的方法

    在SoCEDS环境下编译和更新preloader和uboot程序的方法   前面有介绍preloader在HPS boot过程中的的作用,接下来讲述下用户在SoCEDS环境下改如何编译preloade ...

  4. JIT(Just in time,即时编译,边运行边编译)、AOT(Ahead Of Time,运行前编译),是两种程序的编译方式

    JIT(Just in time,即时编译,边运行边编译).AOT(Ahead Of Time,运行前编译),是两种程序的编译方式

  5. 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

    使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 网上的 MapReduce WordCount 教程对于如何编译 WordCount.java 几乎是一笔带过… 而有写到的 ...

  6. Java 实现《编译原理》简单词法分析功能 - 程序解析

    Java 实现<编译原理>简单词法分析功能 - 程序解析 简易词法分析功能 要求及功能 (1)读取一个 txt 程序文件(最后的 # 作为结束标志,不可省去) { int a, b; a ...

  7. 在Mac上用自己编译出的DNX运行.NET程序

    DNX的全称是.NET Execution Enviroment(.NET执行环境),它是.NET跨平台的一个重要角色.如果你关注.NET的跨平台,一定要关注DNX. 由于Mono 4.0的一个bug ...

  8. 编译Ngnix遇到的问题,查看程序依赖的库文件

    要点:ldd 可以读取每个可以运行的程序依赖的 so 文件. 编译的时候提示需要Openssl库. 查看本机,已经安装了openssl 查看编译报错文件,查找Openssl所依赖的库 more obj ...

  9. 反编译Android APK及防止APK程序被反编译

    怎么逆向工程对Android Apk 进行反编译 google Android开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式 ...

  10. C#编译成以管理员身份运行程序

    转载自:http://www.cnblogs.com/babycool/p/3569183.html 在使用winform程序获取调用cmd命令提示符时,如果是win7以上的操作系统,会需要必须以管理 ...

随机推荐

  1. python后端model模板

    from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation from django.contri ...

  2. UML类图的表示

    1.类的表示方法 2.接口的两种表示方法 3.类的继承怎么表示 空心三角形+实线 4.类实现接口 空心三角形+虚线 5.关联(association)关系 实线箭头 6.聚合(aggregation) ...

  3. UE4 WebUI使用指南2-通信

    前面一篇WebUI的文章讲述的WebUI插件的下载,开启,在UE中创建,加载网页等. 本文继续讲述通过WebUI,UE和网页实现双向通信的实现思路. 一点说明 由于WebUI 使用的浏览器内核并不是最 ...

  4. 个人使用 sudo 方法

    sudo 作用:允许 系统管理员 授予某些用户或用户组以 其他用户身份 运行某些或所有命令的权限 su 用于变更为其他使用者的身份的命令,一般需要键入该使用者的密码 sudo 则是对 su 使用的简化 ...

  5. Windows安装虚拟机软件-VirtualBox

    1.VirtualBox简介 VirtualBox号称是最强的开源免费虚拟机软件,它不仅具有丰富的特色,而且性能也很优异. 它简单易用,可虚拟的系统包括Windows.Mac OS X.Linux.O ...

  6. 13、Spring之JdbcTemplate

    13.1.环境搭建 13.1.1.创建module 13.1.2.选择maven 13.1.3.设置module名称和路径 13.1.4.module初始状态 13.1.5.配置打包方式和依赖 < ...

  7. 【PHP】5版本 过程式操作MySQL

    建立连接和释放连接: # 连接参数 $sever = 'localhost:3309'; $username = 'root'; $password = 'root'; # 调用连接方法,如果失败结束 ...

  8. 【H5】16 表单 其五 表单验证

    在将数据提交到服务器之前,重要的是确保以正确的格式填写所有必需的表单控件.这称为客户端表单验证,可帮助确保所提交的数据符合各种表单控件中规定的要求.本文将引导您通过基本概念和客户端表单验证示例. 先决 ...

  9. 【转载】 5:0!AI战胜人类教官,AlphaDogfight大赛落幕

    原文:https://baijiahao.baidu.com/s?id=1675621109599102721&wfr=spider&for=pc ------------------ ...

  10. python3.9的nogil版本编译pytorch2.0.1源码报错——失败

    关于python3.9的nogil版本参看: PEP 703作者给出的一种no-GIL的实现--python3.9的nogil版本 ================================== ...