tcl/tk-多文件starkit中的依赖项库问题
我正在尝试创建一个由多个tcl源文件组成的starkit,使用tcl/tk-多文件starkit中的依赖项库问题,tcl,tk,tcltk,starkit,Tcl,Tk,Tcltk,Starkit,我正在尝试创建一个由多个tcl源文件组成的starkit,使用wish可以在我的机器上毫无问题地执行。但是,在尝试对Tlckit执行相同操作时,我从直接来自main.tcl的顶级源文件中获取的一个二级源文件中得到了此错误 unknown or ambiguous item type "waveform" while executing "$c create waveform 0 0 -sound snd -height $v(waveh) -width $v
wish
可以在我的机器上毫无问题地执行。但是,在尝试对Tlckit执行相同操作时,我从直接来自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
- 直接将
编译到tclkit运行时中(而不是作为vfs中的库)snack
- 再次将
添加到相关的源文件中package require snack
- 使我的应用程序成为
中的包,而不是直接vfs目录中的包lib
source
s将所有源文件合并为一个。因此,我怀疑这是某种竞争条件,但我既无法证明它,也无法调试它
很抱歉,如果我遗漏了任何重要的内容(对于tcl/tk来说是新的)。如果您有任何建议,我将不胜感激。非常感谢!:) 零食主要是一种健康的工具包。它向Tcl添加了一个
snack::sound
命令,用于处理音频(播放、录制等)。当与Tk结合使用时,它还向Tk画布添加波形项类型。要使其工作,必须在零食之前加载Tk。使用wish
时,从一开始就加载Tk。但是,对于tclkit(除非在windows上运行),Tk必须使用包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
哪个操作系统?我可以想象,如果在零食之前加载Tk,零食只会添加画布项目类型。当使用wish时,这是有保证的。但是tclkit可能不是这样(Windows除外)。@SchelteBron为了完整起见,操作系统是Linux(更具体地说是Ubuntu18.04 LTS)。
require
s的顺序确实是导致问题的原因。它解决了问题。我真是太傻了,没能找出问题所在XwX非常感谢您的友好指导!我已将答案标记为已接受,并将在获得足够的声誉点数后进行投票。(很抱歉,我还是新来的(^^;)