2016-06-12 20 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的好东西。