參考 Building and Distributing Applications.
假設原始碼由兩個檔案組成,A.ss
和 B.ss
,其中 A.ss
依賴 B.ss
。下面我們將其編譯為可供分發的二進位制檔案。
將原始碼轉為 object file
在 Chez Scheme 的 REPL 中(下同)輸入
;; REPL
(compile-library "B.ss") ; by default it compiles to "B.so"
(compile-program "A.ss") ; by default it compiles to "A.so"
注:so
字尾是 Scheme object 的縮寫,而非 Linux 系統下的 shared object 檔案,儘管兩者用途類似,但檔案格式不同。
(可選)合併 object file
;; REPL
(concatenate-object-files "out.so" "B.so" "A.so")
用 scheme-start
包裝程式入口
在 A.ss
中,用 scheme-start
包裝程式入口,其中 fns
為命令列傳入引數
;; A.ss
(scheme-start
(lambda fns
#;(initialize-application)
#;(start-application fns)))
將 object file 轉為 boot file
;; REPL
(make-boot-file "out.boot" '("scheme") "out.so")
; (make-boot-file "out.boot" '("scheme") "B.so" "A.so")
將 Chez Scheme 可執行檔案複製並命名為 boot file 的名稱
## bash
cp /usr/bin/scheme ./out
可以執行了!
## bash
./out -b out.boot
# scheme -b out.boot
理論上 SCHEMEHEAPDIRS="%x:" ./out
也是可以的,這時應該會自動識別出 boot file 的檔名,但是我沒有成功...