tcl/tk - 多文件 starkit 中的依赖库问题
tcl/tk - dependency library issue in multifile starkit
我正在尝试创建一个由多个 tcl 源文件组成的 starkit,它可以在我的 wish
机器上毫无问题地执行。然而,在尝试对 tclkit 做同样的事情时,我从直接来自 main.tcl
.
的顶级源文件中的一个二级源文件中得到了这个错误
unknown or ambiguous item type "waveform"
while executing
"$c create waveform 0 0 -sound snd -height $v(waveh) -width $v(cWidth) -tags [list obj wave] -debug $::debug -fill $v(wavColor) -limit $v(waveScale)"
invoked from within
"if $v(showWave) {
$c create waveform 0 0 -sound snd -height $v(waveh) -width $v(cWidth) -tags [list obj wave] -debug $::debug -fill $v(wavColor) ..."
(procedure "Redraw" line 28)
invoked from within
"Redraw all"
(procedure "resetDisplay" line 21)
invoked from within
"resetDisplay"
(file "MYAPPLICATION.vfs/TOPLEVEL.tcl" line 591)
waveform
来自 snack
图书馆,所以我调查了一下。该库没有未解决的外部依赖性,如果根本无法使用该库,错误会更早发生,所以我尝试了以下方法:
- 从源代码重新编译
snack
库
- 直接编译
snack
到 tclkit 运行时(而不是作为 vfs 中的库)
- 再次将
package require snack
添加到有问题的源文件中
- 将我的应用程序打包到
lib
而不是直接 vfs 目录中
None以上作品。我发现的唯一可行方法是通过替换 source
s 将所有源文件合并为一个。因此,我怀疑这是某种竞争条件,但我既无法证明也无法调试它。
抱歉,如果我遗漏了这里的任何重要内容(tcl/tk 很新)。真的很感激任何建议。首先十分感谢! :)
Snack 主要是一个声音工具包。它向 Tcl 添加了一个 snack::sound
命令以处理音频(播放、录音等)。当与Tk结合使用时,它还会在Tk中添加一个波形项类型canvas。为此,Tk 必须在 snack 之前加载。当使用 wish
时,Tk 从头开始加载。但是使用 tclkit(除非 运行 on windows),Tk 必须用 package require Tk
命令加载。
我可以使用以下代码重现您的错误:
package require snack
package require Tk
snack::sound snd
snd read foo.wav
canvas .c
.c create waveform 0 0 -sound snd
当我交换前两行时,错误消失了。所以:
package require Tk
package require snack
我正在尝试创建一个由多个 tcl 源文件组成的 starkit,它可以在我的 wish
机器上毫无问题地执行。然而,在尝试对 tclkit 做同样的事情时,我从直接来自 main.tcl
.
unknown or ambiguous item type "waveform"
while executing
"$c create waveform 0 0 -sound snd -height $v(waveh) -width $v(cWidth) -tags [list obj wave] -debug $::debug -fill $v(wavColor) -limit $v(waveScale)"
invoked from within
"if $v(showWave) {
$c create waveform 0 0 -sound snd -height $v(waveh) -width $v(cWidth) -tags [list obj wave] -debug $::debug -fill $v(wavColor) ..."
(procedure "Redraw" line 28)
invoked from within
"Redraw all"
(procedure "resetDisplay" line 21)
invoked from within
"resetDisplay"
(file "MYAPPLICATION.vfs/TOPLEVEL.tcl" line 591)
waveform
来自 snack
图书馆,所以我调查了一下。该库没有未解决的外部依赖性,如果根本无法使用该库,错误会更早发生,所以我尝试了以下方法:
- 从源代码重新编译
snack
库 - 直接编译
snack
到 tclkit 运行时(而不是作为 vfs 中的库) - 再次将
package require snack
添加到有问题的源文件中 - 将我的应用程序打包到
lib
而不是直接 vfs 目录中
None以上作品。我发现的唯一可行方法是通过替换 source
s 将所有源文件合并为一个。因此,我怀疑这是某种竞争条件,但我既无法证明也无法调试它。
抱歉,如果我遗漏了这里的任何重要内容(tcl/tk 很新)。真的很感激任何建议。首先十分感谢! :)
Snack 主要是一个声音工具包。它向 Tcl 添加了一个 snack::sound
命令以处理音频(播放、录音等)。当与Tk结合使用时,它还会在Tk中添加一个波形项类型canvas。为此,Tk 必须在 snack 之前加载。当使用 wish
时,Tk 从头开始加载。但是使用 tclkit(除非 运行 on windows),Tk 必须用 package require Tk
命令加载。
我可以使用以下代码重现您的错误:
package require snack
package require Tk
snack::sound snd
snd read foo.wav
canvas .c
.c create waveform 0 0 -sound snd
当我交换前两行时,错误消失了。所以:
package require Tk
package require snack