Tcl无法在快照包中找到init.tcl

时间:2016-08-27 03:25:54

标签: snapcraft snap-package

在常规系统中,如果必须,我可以导出图书馆以阻止tcl抱怨没有找到init.tcl。 我正在构建一个快照包以分发tcl。一旦构建和安装,我就可以运行tcl.tclsh(这是维护snap命名空间所需的形式)并且它会抱怨上述抱怨并保持在tclsh提示符下。我可以运行一个tcl脚本。但是,我无法执行另一个名为wish的二进制文件。这有快照名称tcl.wish。 这两个都在同一个快照中,有问题的文件init.tcl存在于库位置tcl抱怨没有找到。   我相信我需要在tclsh执行之前导出必要的库位置,以便它可以找到这个文件。我试过这个包括这些路径的回声,所以我知道它被执行。这工作但仍然没有帮助。我想我只是被不止一件事所困扰。我不是专业人士,而且snappy包是新的,命令总是在发展。我可以使用组织命令将所有二进制文件移动到/ bin和所有库到/ lib,或者我可以准确地将它们放在tcl预期的位置。我投票把文件放在预期的方式。 我的问题:

  1. 是否有一套定义明确的tcl和tk预期位置?像一个开箱即用的理想设置?
  2. 我可以将init.tcl移动到已经知道的路径中的位置吗? 我避免将这些lib路径放在bashrc中,因为这只能解决我的情况,但不能解决在他们的机器上安装这个问题的人。运行快照包时应该进行任何路径设置...我认为。
  3. 抱歉长度不好。我想明确表示我们正在处理一个活泼的环境中的tcl,无论这是否重要。我知道我错过了显而易见的因为snapcraft应该把这些文件放在.debs告诉它的地方,我在我的电脑上的安装工作得很好。 $ export -p没有显示任何tcl或tk

1 个答案:

答案 0 :(得分: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

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

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