我正在尝试在动态链接的球拍中创建一个可执行文件.目前我的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)
输出raco exe
意味着静态包含其所需的模块,因此它可能不是您想要的.你看过发射器库吗?它将创建一个exe,其中包含在本地安装上启动程序的绝对最小值.
或者,选择较小的语言,例如#lang racket/base
,它应该生成较小的可执行文件,因为它不链接到任意数量的模块.
最后,如果您使用的是基于Unix的系统,如果已经设置了可执行位(x),则程序应该已经充当可执行文件,因为您已经#!/usr/bin/env
在顶部添加了球拍线.这假设您的Racket处于PATH状态.请参见http://docs.racket-lang.org/guide/scripts.html