【问题标题】:Issues using Clisp to compile files使用 Clipp 编译文件的问题
【发布时间】:2016-11-17 04:25:08
【问题描述】:

所以我在 Windows shell 上使用 Ubuntu 上的新 Bash,并安装了 clisp 包来与 Common Lisp 混淆。当我尝试clisp test.clisp 时出现此错误:

/usr/lib/clisp-2.49/base/lisp.run: error while loading shared libraries: libavcall.so.0: cannot enable executable stack as shared object requires: Invalid argument

这也是一个全新的安装。我查看了/usr/lib 并找到了libavcall.so.0 文件,但我不确定如何处理它。我该如何解决这个问题?

【问题讨论】:

  • “无法启用可执行堆栈”谷歌搜索导致crypt.gen.nz/selinux/faq.html#CP.19。也许这会有所帮助。
  • 不是答案,但要开始在 Windows 上使用 clisp,您还可以安装 windows build of clisp。然后,无论您是选择 Ubuntu 还是 Windows 版本,都为自己准备一个 IDE。我从 LispIDE 开始,这是一个很棒的、小巧的、免费的原生 Windows 应用程序。当我对 Lisp 更加熟悉后,我转而使用 emacs+slime 作为我的 IDE,并且从未回头。因为它是“基于”Lisp 编写的,所以 emacs 迅速成为我最喜欢的编辑器,几乎可以满足我所有的文本编辑需求。
  • 谢谢!虽然我不知道如何解决这个问题,但我会使用它。
  • 它有关于它的 GitHub 问题页面:github.com/Microsoft/BashOnWindows/issues/1128
  • Windows 开发者反馈页面:wpdev.uservoice.com/forums/…

标签: common-lisp clisp


【解决方案1】:

libffcall 2.0 或更高版本不再存在此问题。它已通过this commit 修复。

如果您仍在使用libffcall 1.x:FAQ(用户@cybevnm 引用)解释了大部分内容:

  • libavcall.so 被标记为需要可执行堆栈(属性GNU_STACK 具有值RWE),尽管它不需要可执行堆栈。这是因为它是从汇编语言源代码编译而来的。
  • 您可以通过sudo execstack -c /usr/lib/libavcall.so.0 等命令删除此标志。

【讨论】:

  • 我按照建议删除了该标志,但得到了同样的错误,但出现了libcallback.so.0。因为它是同样的错误,我认为如果我再次使用sudo execstack -c /usr/lib/libcallback.so.0 就会修复它。我一遍又一遍地收到这个新错误UNIX error 5 (EIO): I/O error, Unprintable error message,直到我终止进程。
  • @BensonChau 我不确定,所以只是猜测,很可能这些库确实需要可执行堆栈标志,而您的方法是禁用可执行调用堆栈保护(对于您的 CL 会话或系统-wide) 而不是从二进制文件中删除这些标志...
  • 对,所以我通过将标志添加回二进制文件来扭转这些更改。如果我问我应该如何禁用 CL 会话的可执行调用堆栈保护,你介意吗?老实说,我不知道怎么做。
  • @BensonChau 我不知道,也许 google 可以帮助你
猜你喜欢
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2011-04-17
相关资源
最近更新 更多