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

Sal*_*lil 6 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"))  
Run Code Online (Sandbox Code Playgroud)

我用它编译它

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"
                      '())
Run Code Online (Sandbox Code Playgroud)

它只需要放入一个单独的文件并执行

 racket <launch-file>.rkt
Run Code Online (Sandbox Code Playgroud)

dyo*_*yoo 8

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

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

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