用ECL编译字符游戏的跨平台(Linux/OSX/WINDOWS)可执行文件

用ECL编译字符游戏的跨平台(Linux/OSX/WINDOWS)可执行文件

说明

前面咱们用 CLISP 写了一个代码超简短的字符游戏, 不过每次运行时都须要经过 Common Lisp 来加载, 本文介绍一种能够把 Common Lisp 代码编译为可执行文件的方法: 用 ECLCommon Lisp 程序编译为可执行文件.面试

这里稍微介绍一下 ECL-Embedded Common Lisp, 也就是嵌入式 Common Lisp, 它采用了一种不一样于其余 Common Lisp 实现的内部处理, 具体说就是把 Common Lisp 代码翻译为标准 C 代码, 而后调用系统上的 gcc 进行编译. 因此使用 ECL 的前提是安装好 gcc 编译器.函数

正由于 ECL 的这种内部处理机制, 因此只要是符合 ANSI Common Lisp 标准的代码均可以由 ECL 编译为可执行文件.oop

并且由于调用了 gcc 进行实际的编译连接, 因此生成的可执行文件体积很是小.学习

相关编译命令

  • 编译函数 compile-file, 用于把 Common Lisp 源代码编译为 .fas 文件;
  • 构建函数 c:build-program, 用于调用 gcc 生成可执行文件;
  • 全局变量 c::*delete-files*, 用于设置是否删除中间文件.

假设要编译的文件为 c11-cn.lisp, 咱们的编译构建命令以下:ui

(setf c::*delete-files* nil)
(compile-file "c11-cn.lisp" :system-p t)
(c:build-program "c11-cn" :lisp-files '("c11-cn.o"))
(quit)

可执行文件

就以以前咱们的那个字符游戏经过 Land of Lisp 中的超简短字符游戏例程学习 loop 和 format为例, 把它编译为可执行文件, 在 OSX 系统上执行上述命令后, 会生成可执行文件 c11-cn, 以下:.net

Air:ecl admin$ ls -al c11-*
-rwxr-xr-x  1 admin  staff  16004 12 19 01:30 c11-cn
-rw-r--r--  1 admin  staff   7898 12 19 01:30 c11-cn.c
-rw-r--r--  1 admin  staff   1011 12 19 01:30 c11-cn.data
-rw-r--r--  1 admin  staff    527 12 19 01:30 c11-cn.eclh
-rw-r--r--  1 admin  staff   2389 12 19 01:28 c11-cn.lisp
-rw-r--r--  1 admin  staff  33652 12 19 01:30 c11-cn.o
Air:ecl admin$

看看执行的效果:翻译

Air:ecl admin$ ./c11-cn

|                                                                |
|                                                                |
|                                                                |
|                 A    A                                         |
|                   A                                            |
|                                                                |
|                                                                |
|                                                  A             |
|                                @                               |
|   A                              A                             |
|         A        A                                             |
|                                                                |
|                                                  A             |
|                                                                |
|                                                                |
|                                                  A             |
qwe/asd/zxc 用来移动, (t)eleport-瞬移, (l)eave-离开:

能够看到, 可执行文件很是小, 仅仅 16k, 跟其余 Common Lisp 实现动辄生成几十M的可执行文件相比, ECL 生成的十几K可执行文件简直就是小到极点了(固然小了, 由于原本就是用 gcc 生成的).code

可是该有的功能一点也不缺, 并且还具有跨平台的优点.orm

在树莓派的 Raspbian 系统下进行编译的命令是同样的, 不过可执行文件要稍微大一些, 48k, 以下:blog

pi@rpi ~/code-staff/ecl $ ls -al c11-*
-rwxr-xr-x 1 pi pi 48564 Dec 19 00:01 c11-cn
-rw-r--r-- 1 pi pi  7184 Dec 19 00:01 c11-cn.c
-rw-r--r-- 1 pi pi   990 Dec 19 00:01 c11-cn.data
-rw-r--r-- 1 pi pi   527 Dec 19 00:01 c11-cn.eclh
-rw-r--r-- 1 pi pi  2386 Dec 19 00:01 c11-cn.lisp
-rw-r--r-- 1 pi pi   130 Dec 18 17:22 c11-cn-make.lisp
-rw-r--r-- 1 pi pi 36344 Dec 19 00:01 c11-cn.o
-rw-r--r-- 1 pi pi   114 Dec 18 21:01 c11-make.lisp
pi@rpi ~/code-staff/ecl $ ./c11-cn

|                                                                |
|                                                                |
|                                                               A|
|                            A                                   |
|                                                                |
|                 A                                              |
|                                           A  A                 |
|                                                                |
|                                @                            A  |
|                               A                                |
|   A                                                            |
|                                                                |
|      A                                                         |
|   A                                                            |
|                                                                |
|                                                                |
qwe/asd/zxc 用来移动, (t)eleport-瞬移, (l)eave-离开:

WINDOWS 下编译应该是同样的, 不过须要预先安装好 gcc, 暂时没试验, 后面试验了再补充.

相关文章
相关标签/搜索