如何在Racket中创建动态链接的可执行文件?

时间:2012-03-19 15:20:37

标签: racket

我正在尝试在动态链接的球拍中创建一个可执行文件。目前我的hello world程序编译为4MB可执行文件。这是:

#!/usr/bin/env racket  
#lang racket  

(define (extract str)  
  (substring str 4 7))  

(print (extract "the cat out of the bag"))  

我使用

编译它

raco exe first.rkt

最终的可执行文件是4+ MB。所以,显然,它是静态链接球拍库。

- 编辑---

这是启动码:

#lang racket

(require launcher/launcher)
(require racket/runtime-path)

(define-runtime-path prog-path "first.rkt")

(make-racket-launcher (list (path->string prog-path))
                      "first"
                      '())

只需要放入一个单独的文件并用

执行
 racket <launch-file>.rkt

2 个答案:

答案 0 :(得分:7)

raco exe的输出意味着静态包含其所需的模块,因此它可能不是您想要的。你看过launcher图书馆了吗?它将创建一个exe,其中包括在本地安装上启动程序的绝对最小值。

或者,选择较小的语言,例如#lang racket/base,它应该生成较小的可执行文件,因为它不会链接到任意数量的模块。

最后,如果您使用的是基于Unix的系统,如果已经设置了可执行位(x),则该程序应该已经充当可执行文件,因为您已经在顶部添加了#!/usr/bin/env球拍线。这假设您的Racket处于PATH状态。见http://docs.racket-lang.org/guide/scripts.html

答案 1 :(得分:2)

你有没有尝试过raco发布?

文档在这里: http://docs.racket-lang.org/raco/exe-dist.html