2016-06-12 18 views
0

我創建了一個abc.scm文件,並試圖將其編譯爲二進制(或其他詭計方案編譯成)使用「公會編譯 「,」scm「和」guile「命令在Ubuntu終端。無法工作,如何運行.scm(使用詭計或SCM)文件

對於 「公會編譯abc.scm」,我得到的輸出「寫道`/home/tarunmaganti/.cache/guile/ccache/2.0-LE-8-2.0/home/tarunmaganti/abc.scm .go'「 我找到該文件並以此運行 - 」./abc.scm.go「,其中說明權限被拒絕。
當我給使用「搭配chmod 755」或「搭配chmod 777」必要的權限,我得到這樣一個錯誤 - 「慶典:./abc.scm.go:不能執行二進制文件:執行格式錯誤 」。

scm whatever-file-name.scm」只是打開scm解釋器。

的「詭計任何文件,name.scm什麼都不做。

官方GNU /狡詐計劃的鏈接是不是非常有幫助。

請幫助我,我想創建一個guile scheme腳本文件編譯並運行它作爲C/C++程序可能嗎? 如果編譯不可行,我想知道如何至少運行腳本文件GNU/guile scheme or MIT-Scheme

{一步一步高度讚賞,我仍然是初學者在使用Ubuntu和也在計劃。}

在此先感謝。

回答

1

可以使用家當符號創建一個狡詐的腳本(-s是狡詐的新版本可選):

#!/usr/bin/guile -s 
!# 
(display "Hello, world!\n") 

通知的!#在第二行。 Guile將#!作爲塊註釋的開始(類似於#|在標準Scheme中),必須使用!#(類似於標準Scheme中的|#)來終止。

如果您希望腳本將任何命令行選項傳遞給Guile本身,請閱讀meta switch。下面是這樣一個例子:

#!/usr/bin/guile \ 
-e main -s 
!# 
(define (main args) 
    (if (null? (cdr args)) 
     (format #t "Hello, world!~%") 
     (for-each (lambda (name) 
        (format #t "Hello, ~a!~%" name)) 
       (cdr args)))) 
+0

我遵循頂部線條的約定。我問的是如何使用Guile或SCM解釋器運行該腳本,或者如何編譯腳本文件並運行可執行文件。 –

+0

@TarunMaganti您不能在Guile中創建獨立的二進制文件,至少不能在2.0或更低版本中創建。用我推薦的shebang行,你可以簡單地使腳本文件可執行並運行它。 –

+0

謝謝!但是,那麼公會編譯用的是什麼?它說,.scm文件會自動編譯。另外,你可以給我一個關於如何運行腳本的參考。 –

1

Guile的編譯器就像Java的編譯器:它產生的字節碼然後在Guile的VM中運行。我不知道有什麼辦法可以從Guile Scheme代碼直接到本地代碼。 Guile確實是一種擴展語言,允許您將Scheme腳本添加到您的C/C++程序中。

我對麻省理工學院的計劃瞭解不多,但從我可以告訴它也不能編譯成獨立的可執行文件。隨時糾正我。

儘管如此,還是有一種解決方法。只要你不介意對libguile的依賴,你可以在C/C++中編寫一個包裝器,並且手工處理一個包含你的Scheme代碼的字符串。 Dia here的Guile手冊中給出了一個基本示例。在一個頭文件中創建你的腳本,並將其包裝在一個以空字符結尾的C字符串中,然後(在一些樣板和其他東西之後)用scm_eval_string()進行評估。

如果你想寫Scheme並輸出本機二進制文件,我已經聽說了關於Chicken的好東西。