編譯和分發 Chez Scheme 應用程式

Ancker-0發表於2024-09-08

參考 Building and Distributing Applications.

假設原始碼由兩個檔案組成,A.ssB.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 的檔名,但是我沒有成功...

相關文章