首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法计算如何运行.scm文件(使用guile或scm)

无法计算如何运行.scm文件(使用guile或scm)
EN

Stack Overflow用户
提问于 2016-06-12 10:11:07
回答 3查看 2.8K关注 0票数 6

我已经创建了一个abc.scm文件,并试图在Ubuntu的终端中使用“abc.scm编译”、"scm“和" guile ”命令将其编译成二进制文件(或任何guile方案编译到的)。

对于“`/home/tarunmaganti/.cache/guile/ccache/2.0-LE-8-2.0/home/tarunmaganti/abc.scm.go'”行会编译abc.scm",我得到了输出“我找到了文件并像这样运行-- "./abc.scm.go”,上面写着拒绝许可。“

当我使用"chmod 755“或"chmod 777”授予必要的权限时,会得到一个错误,如"bash:./abc.scm.go:无法执行二进制文件: Exec格式错误“。

"scm任何-file-file. scm “打开了scm解释器。

欺骗任何-file-name.scm什么都不做。

官方GNU/Guile方案的链接没有多大帮助。

求你帮帮我。我想要创建一个诡计方案脚本文件。编译并作为C/C++程序运行。有可能吗?如果不可能编译,我想知道如何至少运行GNU/guile MIT-Scheme的脚本文件。

{一步一步地受到高度赞赏,我仍然是使用Ubuntu的初学者。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-12 16:09:53

您可以使用shebang表示法来创建一个Guile脚本( -s在新版本的Guile中是可选的):

代码语言:javascript
复制
#!/usr/bin/guile -s
!#
(display "Hello, world!\n")

注意第二行的!#。Guile将#!视为块注释的开始(类似于标准方案中的#| ),必须使用!# (类似于标准方案中的|# )终止该注释。

如果希望脚本传递任何命令行选项来欺骗自身,请阅读有关元开关的内容。以下是这样的一个例子:

代码语言:javascript
复制
#!/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))))
票数 5
EN

Stack Overflow用户

发布于 2019-05-21 21:27:44

显然,guile foo假定foo是一个Scheme源文件。如果foo是预编译的二进制.go文件,它将尝试将其作为文本文件来处理,并再次编译它,结果失败。我找不到执行预编译.go文件的任何等效命令行语法。

但是,您可以获得以下几乎相同的效果:

  • 编写一个源文件foo.scm,它导出一个主要过程:
代码语言:javascript
复制
(define-module (foo)
  #:export (main))

(define (main)
  (display "Hello world!")
  (newline))
  • guild compile -o foo.go foo.scm预编译
  • 编写运行guile -C "$PWD" -c "(use-modules (foo)) (main)"的shell脚本。-C dir标志(大写C)告诉它从目录dir加载预编译文件。-c expr标志(小写c)告诉它计算Scheme代码expr,在本例中,该代码只是执行use-module来加载预编译模块,然后调用我们的主要过程。
票数 3
EN

Stack Overflow用户

发布于 2016-08-21 19:09:03

Guile的编译器就像Java的编译器:它生成字节码,然后在Guile的VM中运行。我不知道有什么方法可以直接从Guile Scheme代码转到本机代码。Guile实际上是一种扩展语言,允许您将Scheme脚本添加到C/C++程序中。

我对MIT方案不太了解,但据我所知,它也没有编译成一个独立的可执行文件。在这点上请随时纠正我。

不过,这一切总有办法解决的。只要您不介意对libguile的依赖,就可以用C/C++编写一个包装器,并给libguile一个包含你的Scheme代码的字符串。在Dia 这里的Guile手册中给出了一个基本示例。在头文件中创建脚本,并将其包装在一个以空结尾的C字符串中,然后(经过一些样板和诸如此类的操作)使用scm_eval_string()计算它。

如果您想编写Scheme并输出本机二进制文件,我听说过关于鸡肉的一些好东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37773025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档