我正在尝试在动态链接的球拍中创建一个可执行文件。目前我的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
答案 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发布?