【问题标题】:Problems compiling Chicken Scheme egg "lookup-table"编译鸡计划鸡蛋“查找表”的问题
【发布时间】:2016-08-14 00:14:45
【问题描述】:

我正在尝试静态编译并链接一个 Chicken Scheme 程序,而这个鸡蛋给我带来了一些麻烦。当我在 repl 上尝试时,我得到了同样的错误,但有更多信息;所以这里是:

> chicken-install >/dev/null -retrieve lookup-table
> csi ./lookup-table/lookup-table.scm -I ./lookup-table

CHICKEN
(c) 2008-2014, The Chicken Team
(c) 2000-2007, Felix L. Winkelmann
Version 4.9.0.1 (stability/4.9.0) (rev 8b3189b)
linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
bootstrapped 2014-06-07

; loading /tmp/tempfabd.10142/lookup-table/lookup-table.scm ...
; loading /var/lib//chicken/7/chicken.import.so ...
; including /tmp/tempfabd.10142/lookup-table/lookup-table-body.scm ...
; loading /var/lib//chicken/7/srfi-1.import.so ...
; loading /var/lib//chicken/7/srfi-69.import.so ...
; loading /var/lib//chicken/7/ports.import.so ...
; loading /var/lib//chicken/7/data-structures.import.so ...
; loading /var/lib//chicken/7/extras.import.so ...
; loading /var/lib//chicken/7/miscmacros.import.so ...
; loading /var/lib//chicken/7/type-checks.import.so ...
; loading /var/lib//chicken/7/type-errors.import.so ...
; loading /var/lib//chicken/7/foreign.import.so ...
; loading /var/lib//chicken/7/record-variants.import.so ...
; loading /var/lib//chicken/7/miscmacros.so ...
; loading /var/lib//chicken/7/record-variants.so ...

Warning: reference to possibly unbound identifier `MAGIC-LIMIT' in:
Warning:    magic-count?

Error: module unresolved: lookup-table

           Call history:

           <syntax>             [dict-print] (##core#let ((port (optional732 tmp735 #f))) (if (not port) (*dict-print dict) (with-output-to-port ......
           <syntax>             [dict-print] (##core#begin (##core#if (not port) (*dict-print dict) (with-output-to-port port (lambda () (*dict-p......
           <syntax>             [dict-print] (##core#if (not port) (*dict-print dict) (with-output-to-port port (lambda () (*dict-print dict))))
           <syntax>             [dict-print] (not port)
           <syntax>             [dict-print] (*dict-print dict)
           <syntax>             [dict-print] (with-output-to-port port (lambda () (*dict-print dict)))
           <syntax>             [dict-print] (lambda () (*dict-print dict))
           <syntax>             [dict-print] (##core#lambda () (*dict-print dict))
           <syntax>             [dict-print] (##core#begin (*dict-print dict))
           <syntax>             [dict-print] (*dict-print dict)
           <syntax>             [dict-print] (optional732 tmp735 #f)
           <syntax>             [dict-print] (##core#let ((tmp739 tmp735)) (##core#if (null?740 tmp739) #f (car741 tmp739)))
           <syntax>             [dict-print] (##core#begin (##core#if (null?740 tmp739) #f (car741 tmp739)))
           <syntax>             [dict-print] (##core#if (null?740 tmp739) #f (car741 tmp739))
           <syntax>             [dict-print] (null?740 tmp739)
           <syntax>             [dict-print] (car741 tmp739)     <--

我尝试过的所有其他鸡蛋都编译得很好。有人可以帮我解决这个问题吗?这有点让我停下脚步。

【问题讨论】:

    标签: scheme chicken-scheme


    【解决方案1】:

    互联网表明这个鸡蛋有问题,可能这有帮助(似乎有效):在lookup-table-body.scm ~line 308(在magic-count的定义中?)替换@ 987654321@与12

    (define-inline (magic-count? count) (<= count 12 #;MAGIC-LIMIT))
    

    导致问题的这个MAGIC-LIMIT 常量似乎只使用了一次,它的值在lookup-table.setup 中定义...祝你好运!

    【讨论】:

    • 我有点需要它在不实际更改源的情况下工作。也许如果我在编译时将opts 从lookup-table.setup 传递给csc?这可能就足够了。为什么他们不能在该死的源代码中定义MAGIC-LIMIT,我不知道。
    • 作者好像从2009年起就没有碰过这个彩蛋了……为什么你不想改变源,你想让编译过程保持自动吗?
    • csc -unit lookup-table -emit-import-library lookup-table -prelude "\"(define-constant MAGIC-LIMIT 12)\"" -cJ lookup-table.scm 似乎工作...
    • 是的,我希望它是自动的。我说“编译我的源代码”,它递归地获取必要的鸡蛋,确定它们的依赖关系,并将所有内容编译成一个静态链接的可执行文件。该命令行可能有效,但它不是可以自动确定的。询问 .setup 文件似乎是一条死胡同,因为 [a] 它并不总是包含 opts 的声明,并且 [b] 它不会包含 (load)。所以我不能在运行时从中提取任何有意义的东西。
    • 我需要知道 chicken-install 对 .setup 文件做了什么。它如何知道编译时使用哪些选项?一定与setup-shared-extension-module 有关,但鉴于(loading .setup 文件会引发一堆错误.....
    【解决方案2】:

    它看起来像是特定鸡蛋中的一个简单错误。如果您想修复此问题,我建议您提交错误报告。最常见的方法是使用错误跟踪器(在这种情况下,可能是 bugs.call-cc.org)、向 egg 的作者发送电子邮件或使用 chicken-users 邮件列表。

    PS:关于chicken-users,一般来说,你可能会比在 Stack Overflow 上更幸运地回答你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 2017-05-29
      • 2020-05-18
      • 2011-07-08
      • 2019-02-21
      • 2021-09-15
      • 1970-01-01
      相关资源
      最近更新 更多