0

在常规系统中,如果必须,我可以导出库以阻止 tcl 抱怨找不到 init.tcl。我正在构建一个快照包来分发 tcl。一旦构建和安装,我可以运行 tcl.tclsh(这是维护 snap 命名空间的形式),它会抱怨上述抱怨并停留在 tclsh 提示符中。我可以很好地运行 tcl 脚本。但是,我无法执行另一个名为 wish 的二进制文件。这具有快照名称 tcl.wish。这两个都在同一个快照中,并且有问题的文件 init.tcl 存在于库位置 tcl 抱怨找不到。我相信我需要在 tclsh 执行之前导出必要的库位置,以便它可以找到这个文件。我试过这个,包括这些路径的回声,所以我知道它被执行了。这有效,但仍然没有帮助。我想我只是被不止一件事难住了。我不是 tcl pro 并且 snappy 包是新的并且命令总是在不断发展。我可以使用组织命令将所有二进制文件移动到 /bin 并将所有库移动到 /lib,或者我可以将它们完全按照 tcl 的期望放置。我投票赞成将文件按预期放置。我的问题:

  1. tcl 和 tk 是否有一组明确定义的预期位置?开箱即用的理想设置?
  2. 我可以将 init.tcl 移动到它知道的路径中的位置吗?我避免将这些库路径放在 bashrc 中,因为这只会解决我的情况,但不会解决在他们的机器上安装它的人。运行快照包时应该进行任何路径设置......我认为。

对不起长度。我想明确表示,无论这是否重要,我们都是在一个活泼的环境中处理 tcl。我知道我错过了显而易见的事情,因为 snapcraft 应该将这些文件放在 .debs 告诉它的位置,并且我在计算机上的安装工作得很好。$ export -p 不显示任何 tcl 或 tk

4

1 回答 1

1

这是任何想尝试的人的解决方案。Tcl 抱怨找不到 init.tcl 并且希望甚至没有启动。我尝试了各种方法来导出文件所在的路径,但没有成功。我注意到在生成快照包时,会为每个公开的二进制文件生成一个包装器。在这个包中,我创建了两个二进制文件 - tclsh 和 wish。导出失败后,我将包装文件复制到 snapcraft.yaml 文件所在的位置,因为清理系统会杀死之前生成的所有文件。我在每个包装器中添加了以下内容:

export TCL_LIBRARY=$SNAP/usr/share/tcltk/tcl8.6:$TCL_LIBRARY:$TK_LIBRARY
export TK_LIBRARY=$SNAP/usr/share/tcltk/tk8.6:$TK_LIBRARY:$TCL_LIBRARY

然后我编辑了该apps:部分以反映包装器的使用,而不是直接二进制调用。

apps:
  tclsh:
    command: tclsh.wrapper #used to be just tclsh without the benefit of a wrapper with exports in it
    plugs: [home, unity7, network, x11]
  wish:
    command: wish.wrapper # same as above
    plugs: [home, unity7, network, x11]

最后,在我的胶水部分中,我包含了这些包装:

glue:
  plugin: copy
    files:
      tclsh.wrapper: usr/bin/tclsh.wrapper
      wish.wrapper: usr/bin/wish.wrapper

然后我制作了 snap 包并安装了它。tclsh 和 wish 都按预期工作,没有任何抱怨。

tclsh 的执行命令是 tcl.tclsh 而希望它是 tcl.wish

于 2016-08-30T02:01:50.230 回答